This is used to check the if type T implements an interface I.
var _ errcode.ErrorCode = (*StoreTombstonedErr)(nil) // assert implements interface
var _ errcode.ErrorCode = (*StoreBlockedErr)(nil)
In above code snippet First line checks that StoreTombstonedErr
implmenets errcode.ErrorCode
While Second line checks that *StoreBlockedErr
implements errcode.ErrorCode
.
You can ask the compiler to check that the type T implements the
interface I by attempting an assignment using the zero value for T or
pointer to T, as appropriate:
type T struct{}
var _ I = T{} // Verify that T implements I.
var _ I = (*T)(nil) // Verify that *T implements I.
If T (or *T, accordingly) doesn't implement I, the mistake will be caught at compile time.
If you wish the users of an interface to explicitly declare that they implement it, you can add a method with a descriptive name to the interface's method set. For example:
type Fooer interface {
Foo()
ImplementsFooer()
}
A type must then implement the ImplementsFooer method to be a Fooer
type Bar struct{}
func (b Bar) ImplementsFooer() {}
func (b Bar) Foo() {}