首先澄清一下标题,我知道 Go 中没有接口文字这样的东西,但我无法为这个问题想出另一个名字。我正在阅读一些 Go 代码并发现了一个奇怪的结构,如下所示:clientOptions := []grpc.DialOption{grpc.WithInsecure()}
cc, err := grpc.Dial(l.Addr().String(), clientOptions...)这里 grpc.DialOptions 是一个接口类型,而 grpc.WithInsecure() 返回该类型。在这里引起我注意的是 clientOptions 是一个切片,这对我来说似乎是多余的。所以我尝试像这样删除大括号:clientOptions := grpc.DialOption{grpc.WithInsecure()}但我得到编译错误:“无效的复合文字类型 grpc.DialOption”我试图在 go 操场上模拟这个,我得到了相同的结果。此代码运行良好: https ://go.dev/play/p/QJQR9BDGN4a但是这个版本失败了,同样的“无效的复合文字类型错误”: https ://go.dev/play/p/A0FasDybUg5有人可以解释一下吗?谢谢
1 回答
大话西游666
TA贡献1817条经验 获得超14个赞
您是正确的,这会创建一个切片:
clientOptions := []grpc.DialOption{grpc.WithInsecure()}但是我认为您误解了哪种语法可以做什么。这将是一个空切片文字:
clientOptions := []grpc.DialOption{}这将是单个值,而不是切片:
clientOptions := grpc.WithInsecure()
作为参考,此语法包含在Tour of Go中。
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消
