-1

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

Himanshu
  • 12,071
  • 7
  • 46
  • 61
xren
  • 1,381
  • 5
  • 14
  • 29

1 Answers1

1

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() {}
Himanshu
  • 12,071
  • 7
  • 46
  • 61