go 语言的一个赋值操作
Posted charlieroro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 语言的一个赋值操作相关的知识,希望对你有一定的参考价值。
最近在看client-go源码,在源码的\tools\caches\store.go文件中有一行代码不得其解(如下标黄内容),它将一个struct赋值给了一个interface
type Store interface 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
google搜索后没有得到结果,在stackoverflow上提交了一个问题golang syntax in client-go,很快就得到了回答(老外自由时间果然比较多^^),“var _ Store = &cache”的作用是强制要求cache结构实现Store接口。
做个测试,TestSt实现了TestIf接口中的一个方法write,但由于没有实现read,则其并没有实现TestIf接口
下述代码是可以运行的
package main import "fmt" type TestIf interface write(w string) read() type TestSt struct func (t *TestSt)write(w string) fmt.Println("write") func main() fmt.Println(111)
但下述是不可以运行的
package main import "fmt" type TestIf interface write(w string) read() type TestSt struct func (t *TestSt)write(w string) fmt.Println("write")
var _ TestIf=&TestSt
func main()
fmt.Println(111)
报出的错误如下:
Cannot use ‘&TestSt‘ (type *TestSt) as type TestIf in assignment Type does not implement ‘TestIf‘ as some methods are missing: read() more... (Ctrl+F1)
该语法实际就是实现了某结构必须实现某接口的强制要求
以上是关于go 语言的一个赋值操作的主要内容,如果未能解决你的问题,请参考以下文章