This question already has an answer here:
someone can help me to understand these code?
in the client-go project, there are some codes i can't understand. code path is \tols\cache\store.go
Add(obj interface{}) error
Update(obj interface{}) error
Delete(obj interface{}) error
List() []interface{}
ListKeys() []string
Get(obj interface{}) (item interface{}, exists bool, err error)
GetByKey(key string) (item interface{}, exists bool, err error)
// Replace will delete the contents of the store, using instead the
// given list. Store takes ownership of the list, you should not reference
// it after calling this function.
Replace([]interface{}, string) error
Resync() error
}
type cache struct {
// cacheStorage bears the burden of thread safety for the cache
cacheStorage ThreadSafeStore
// keyFunc is used to make the key for objects stored in and retrieved from items, and
// should be deterministic.
keyFunc KeyFunc
}
var _ Store = &cache{}
the last line "var _ Store = &cache{}", what is this mean, is there any officials document to support it?
</div>
In golang, if define a variable and do not use it, then it will give an error. By using _
as the name, you can overcome this. I think everybody already saw _, err := doSomething()
in golang. var _ Store = &cache{}
is not different from that. The awesome thing in here is Store
is an interface, so by doing var _ Store = &cache{}
this, it enforces caches
to implement interface Store
. If caches
does not implement the interface, your code won't compile. How awesome trick is that?