go warnning: composite literal uses unkeyed fields

更新日期: 2022-06-10 阅读次数: 203 字数: 230 分类: golang

在启用了 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}

爱评论不评论