go warnning: composite literal uses unkeyed fields

文章目录

    在启用了 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式