看别人写的 go 代码里面,经常在文件开头定义一些空的全局变量
var _ XX = XX{}
请问这有啥用?
1
westoy 2021-03-18 15:54:30 +08:00 2
就是为了没啥用用的
开发的时候导入一个很可能用到的包, 但是一开始根本没用到, 总不能为了不报 unused import 的错, 每次编译都改来改去吧, 就直接让它没啥用一下..... |
2
kaibmlddallyson6 2021-03-18 15:56:24 +08:00
参考 uber go 规范
|
3
baiyi 2021-03-18 15:57:24 +08:00 6
一般应该是 “var _ Client = &kubernetesClient{}” 或者 “var _ Client = (*kubernetesClient)(nil)” 的形式。
主要是为了快速查看 kubernetesClient 是否实现了 Client 的接口。 |
4
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() ``` |
5
outyua 2021-03-21 10:10:54 +08:00
1 楼正解, 这句话并不是告诉编译器 XX 实现了 XX
|