2015-10-20 27 views
0

在golang中,接口對於解耦和編寫代碼非常重要,因此高級go程序可能很容易定義1000個接口。最小化Golang中的接口

我們如何隨着時間的推移發展這些接口,以確保它們保持最小限度?

  • 是否有常用的go工具來檢查未使用的功能?

  • 是否有類似於java的@Override註釋go函數的最佳實踐,它確保聲明的函數正確地實現預期合同?

在Java語言中

通常情況下,很容易保持代碼緊緊結合的接口規範,因爲先進的工裝可以讓我們找到並刪除它們不是在所有引用的函數(一般情況下是自動突出顯示你在任何普通的IDE中)。

回答

0

是否有常用的go工具來檢查未使用的功能?

排序,但確實很難確定導出的界面。 oracle可用於查找對類型或方法的引用,但前提是您擁有引用您的所有代碼可用於您的gopath。

你能確保一個類型實現合同嗎?

如果您嘗試使用類型作爲接口,編譯器將會抱怨,如果它沒有所有的方法。我一般做這個通過導出接口,但沒有實現,並作出構造:

type MyInterface interface{ 
    Foo() 
} 
type impl struct{} 
func (i *impl) Foo(){} 
func NewImpl() MyInterface{ 
    return &impl{} 
} 

如果IMPL沒有實現所有需要的功能這不會編譯。

在go中,不需要聲明您實現了一個接口。這允許你實現一個接口,而不需要引用它定義的包。這與「緊密地綁定到接口規範」完全相反,但它確實允許一些有趣的使用模式。

+0

我想我們可以使用死代碼查找器來找到不再需要的「舊接口impls」。 – jayunit100

0

你要求的並不是Go的一部分。沒有用於註釋函數滿足接口的最佳實踐。我個人認爲唯一明確的最佳做法是記錄你的類型實現哪些接口,以便人們知道。如果你想明確地測試(在編譯時),如果一個類型實現了一個接口,你可以使用賦值來實現,請查看我的答案。 How to check if an object has a particular method?

如果你只是想清點你的代碼庫來做一些清理工作,我會推薦你​​使用這種賦值方法來處理所有類型的錯誤,以避免它們沒有實現的編譯時錯誤,縮小聲明直到編譯完成。在這樣做時,您應該意識到可能實施的內容與實際內容之間的差距。

Go也缺少IDE選項。因此,諸如「查找所有引用」等一些友好功能都不存在。您可以使用文本搜索技巧來解決此問題,例如搜索func TheName以獲取所有調用,並獲取聲明並獲取.TheName(。如果你繼續使用這個工具,我相信你會很快習慣它。