This question already has an answer here:
I saw some golang code and I don't know how it works! Anyone known ? Why write in this way ?
var _ errcode.ErrorCode = (*StoreTombstonedErr)(nil) // assert implements interface
var _ errcode.ErrorCode = (*StoreBlockedErr)(nil) // assert implements interface
And the source code link is https://github.com/pingcap/pd/blob/0e216a703776c51cb71f324c36b6b94c1d25b62f/server/core/errors.go#L37
</div>
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() {}