1 回答

TA貢獻1785條經驗 獲得超8個贊
這用于檢查類型 T 是否實現接口 I。
var _ errcode.ErrorCode = (*StoreTombstonedErr)(nil) // assert implements interface
var _ errcode.ErrorCode = (*StoreBlockedErr)(nil)
在上面的代碼片段中,第一行檢查StoreTombstonedErrimplmenetserrcode.ErrorCode
雖然第二行檢查*StoreBlockedErr實現了errcode.ErrorCode.
您可以要求編譯器檢查類型 T 是否實現了接口 I,方法是嘗試使用 T 的零值或指向 T 的指針進行賦值,視情況而定:
type T struct{}
var _ I = T{} // Verify that T implements I.
var _ I = (*T)(nil) // Verify that *T implements I.
如果 T(或相應的 *T)沒有實現 I,錯誤將在編譯時被捕獲。
如果您希望接口的用戶明確聲明他們實現了它,您可以將具有描述性名稱的方法添加到接口的方法集中。例如:
type Fooer interface {
Foo()
ImplementsFooer()
}
然后一個類型必須實現 ImplementsFooer 方法才能成為 Fooer
type Bar struct{}
func (b Bar) ImplementsFooer() {}
func (b Bar) Foo() {}
- 1 回答
- 0 關注
- 75 瀏覽
添加回答
舉報