go 全局变量的一个疑问?

2021-03-18 15:41:19 +08:00
 yujianwjj

看别人写的 go 代码里面,经常在文件开头定义一些空的全局变量

var _ XX = XX{}

请问这有啥用?

1540 次点击
所在节点    Go 编程语言
5 条回复
westoy
2021-03-18 15:54:30 +08:00
就是为了没啥用用的

开发的时候导入一个很可能用到的包, 但是一开始根本没用到, 总不能为了不报 unused import 的错, 每次编译都改来改去吧, 就直接让它没啥用一下.....
kaibmlddallyson6
2021-03-18 15:56:24 +08:00
参考 uber go 规范
baiyi
2021-03-18 15:57:24 +08:00
一般应该是 “var _ Client = &kubernetesClient{}” 或者 “var _ Client = (*kubernetesClient)(nil)” 的形式。

主要是为了快速查看 kubernetesClient 是否实现了 Client 的接口。
SSang
2021-03-19 17:45:04 +08:00
主要是用来保证 interface 的实现是完整的吧,因为如果实例没有完全实现接口是可以编译过去的,但是加了这个就编译不过去了

比如这样是没问题的,但是其实你可能是想要实现 `TestInterface`,这么写也不会给你报错,但和预期结果就不一样了

```go
type TestInterface interface {
func1()
func2()
}

type test struct {
}

func (t *test) func1() {
}
```

这样写就会有报错了

```go
type TestInterface interface {
func1()
func2()
}

var _ TestInterface = test{}

type test struct {
}

func (t *test) func1() {
}
```

```
Cannot use 'test{}' (type test) as type TestInterface Type does not implement 'TestInterface' as some methods are missing: func2()
```
outyua
2021-03-21 10:10:54 +08:00
1 楼正解, 这句话并不是告诉编译器 XX 实现了 XX

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/762861

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX