Go vet提示‘composite literal uses unkeyed fields’的合规解决方法咨询
解决
go vet的“composite literal uses unkeyed fields”警告(保留嵌入结构体) 当然有合规的解决方式,完全不用修改你的嵌入结构体定义,也不用禁用go vet的检查规则,核心思路是在复合字面量中显式指定嵌入类型作为字段键。
具体解决代码
你只需要把实例化代码改成下面这样:
writer := MyWriter{io.Writer: io.Stdout}
原理说明
在Go中,当你嵌入一个类型(比如这里的io.Writer)时,这个嵌入字段的隐式字段名就是该类型本身(对于来自其他包的类型,需要带上包名前缀)。go vet的警告是因为你之前使用了无键的复合字面量,而显式指定io.Writer作为键后,就符合了“所有复合字面量字段都需明确键值”的规范。
这种方式既保留了你想要的嵌入结构体设计(可以直接调用writer.Write()等io.Writer的方法),又通过合规的写法消除了go vet的警告,完全满足你的需求。
内容的提问来源于stack exchange,提问作者user2969402
相关产品推荐
相关产品推荐

