go 语言的一个赋值操作
发布时间:2020-12-16 09:18:27 所属栏目:大数据 来源:网络整理
导读:?最近在看client-go源码,在源码的toolscachesstore.go文件中有一行代码不得其解(如下标黄内容),它将一个struct赋值给了一个interface type Store interface { Add(obj {}) error Update(obj {}) error Delete(obj {}) error List() [] {} ListKeys() []
?最近在看client-go源码,在源码的toolscachesstore.go文件中有一行代码不得其解(如下标黄内容),它将一个struct赋值给了一个interface type Store interface { Add(obj {}) error Update(obj {}) error Delete(obj {}) error List() []{} ListKeys() []string Get(obj interface{}) (item interface{},exists bool,err error) GetByKey(key string) (item // 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([]) 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{} google搜索后没有得到结果,在stackoverflow上提交了一个问题golang syntax in client-go,很快就得到了回答(老外自由时间果然比较多^^),“var _ Store = &cache{}”的作用是强制要求cache结构实现Store接口。 做个测试,TestSt实现了TestIf接口中的一个方法write,但由于没有实现read,则其并没有实现TestIf接口 下述代码是可以运行的 package main import "fmt" type TestIf { write(w ) read() } type TestSt { } func (t *TestSt)write(w ){ fmt.Println(write) } func main() { fmt.Println(111) } 但下述是不可以运行的 { } func (t *TestSt)write(w ) } func main() { 报出的错误如下: Cannot use '&TestSt{}' (type *TestSt) as type TestIf in assignment Type does not implement TestIf' as some methods are missing: read() more... (Ctrl+F1) 该语法实际就是实现了某结构必须实现某接口的强制要求 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |