在启用了 NeoVim ALE 语法检测插件之后,我发现自己的代码到处都是各种警告,无论是 JS 还是 Go。 而 Go 代码中经常出现的警告信息就是 composite literal uses unkeyed fields。
例如,在使用 Gin I18N 实现多语言翻译的功能时:
警告信息
i18n/i18n.go|32 col 23-45 warning| github.com/gin-contrib/i18n.EmbedLoader composite literal uses unkeyed fields
composite: 合成的
出问题的代码:
Loader: &ginI18n.EmbedLoader{fs},
解决方法:
https://stackoverflow.com/questions/49461354/go-vet-composite-literal-uses-unkeyed-fields-with-embedded-types
首先查看 EmbedLoader 结构体的定义:
type EmbedLoader struct {
FS embed.FS
}
修改方法就是加上 key。
Loader: &ginI18n.EmbedLoader{FS: fs},
更极端的情况
当然,stackoverflow 链接里的示例是更极端的一种情况,key 直接取 embedded type 的名字。
Embedded structs have an implicit key of the type name itself without the package prefix (e.g. in this case, Writer).
type MyWriter struct {
io.Writer
}
使用方法:
writer = MyWriter{Writer: io.Stdout}
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式