为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中的接口字面量

Go 中的接口字面量

Go
MMMHUHU 2022-11-08 16:37:51
首先澄清一下标题,我知道 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中。


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号