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 关注
- 58 浏览
添加回答
举报