go 语言的一个赋值操作

前端之家收集整理的这篇文章主要介绍了go 语言的一个赋值操作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

 最近在看client-go源码,在源码的\tools\caches\store.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 )
}

var _ TestIf=&TestSt{}
func main() { 
fmt.Println(
)
}

报出的错误如下:

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相关文章