關鍵字var后面的下劃線和接口名稱是什么意思?來自http://golang.org/src/pkg/database/sql/driver/types.go :type ValueConverter interface {
// ConvertValue converts a value to a driver Value.
ConvertValue(v interface{}) (Value, error)}var Bool boolType
type boolType struct{}var _ ValueConverter = boolType{} // line 58func (boolType) String() string { return "Bool" }func (boolType) ConvertValue(src interface{}) (Value, error) {....}我知道ValueConverter是一個接口名稱。第58行似乎聲明boolType實現接口ValueConverter,但這是必要的嗎?我刪除了第58行,代碼運行良好。
2 回答
慕仙森
TA貢獻1827條經驗 獲得超8個贊
它提供boolType滿足ValueConverter接口的靜態(編譯時)檢查。將_用作變量的名稱告訴編譯器有效地丟棄RHS值,但類型檢查,如果有任何副作用評價它,但匿名變量本身不采取任何進程空間。
在開發時它是一個方便的構造,并且接口的方法集和/或由類型實現的方法經常被改變。該構造用作防止忘記匹配類型的方法集和用于使它們兼容的接口的方法集。它有效地防止go install了這種遺漏的破碎(中間)版本。
慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
看起來你正在創建一個類型的虛擬值,為它ValueConverter分配一個新boolType對象然后丟棄它(這就是go中下劃線的含義,for _, elt := range myRange { ...}如果你對枚舉的索引不感興趣)。
我的猜測是它只是對應一個靜態檢查,以確保結構boolType確實實現了ValueConverter接口。這樣,當您更改實現時boolType,如果您破壞了ValueConverter接口的實現,編譯器會提前抱怨,因為它將無法將您的新boolType接口轉換為此接口。
添加回答
舉報
0/150
提交
取消
