go 语言的一个赋值操作
2020-12-13 02:01
标签:using cli upd delete div safe tst func pac 最近在看client-go源码,在源码的\tools\caches\store.go文件中有一行代码不得其解(如下标黄内容),它将一个struct赋值给了一个interface google搜索后没有得到结果,在stackoverflow上提交了一个问题golang syntax in client-go,很快就得到了回答(老外自由时间果然比较多^^),“var _ Store = &cache{}”的作用是强制要求cache结构实现Store接口。 做个测试,TestSt实现了TestIf接口中的一个方法write,但由于没有实现read,则其并没有实现TestIf接口 下述代码是可以运行的 但下述是不可以运行的 报出的错误如下: 该语法实际就是实现了某结构必须实现某接口的强制要求 go 语言的一个赋值操作 标签:using cli upd delete div safe tst func pac 原文地址:https://www.cnblogs.com/charlieroro/p/11023704.htmltype 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{}
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)