-1

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?

Helping Hand..
  • 2,430
  • 4
  • 32
  • 52
charlie
  • 9
  • 3

1 Answers1

2

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?

nightfury1204
  • 4,364
  • 19
  • 22