加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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 )
}

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)

该语法实际就是实现了某结构必须实现某接口的强制要求

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读