我看到了一些golang代码,但我不知道它是如何工作的!有人知道吗?为什么要这样写?
var _ errcode.ErrorCode = (*StoreTombstonedErr)(nil) // assert implements interface
var _ errcode.ErrorCode = (*StoreBlockedErr)(nil) // assert implements interface
这用于检查类型T是否实现接口I。
var _ errcode.ErrorCode = (*StoreTombstonedErr)(nil) // assert implements interface
var _ errcode.ErrorCode = (*StoreBlockedErr)(nil)
在上面的代码段中,第一行检查了StoreTombstonedErr
implmenetserrcode.ErrorCode
而第二行检查*StoreBlockedErr
实现errcode.ErrorCode
。
您可以要求编译器通过尝试使用T的零值或指向T的指针进行赋值来检查类型T是否实现了接口I:
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() {}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句