【问题标题】:Disable go vet checks for "composite literal uses unkeyed fields"禁用 go vet 检查“复合文字使用未键入字段”
【发布时间】:2016-07-16 09:30:00
【问题描述】:

我正在我的 CI 工具上运行 go vet,并开始收到错误:

composite literal uses unkeyed fields

因为我在实例化

type A struct {
   *B
}

像这样:

A{b} // b is of type *B

我不在乎这个警告,我想在我的 go vet 检查中禁用它。我该怎么做?

【问题讨论】:

  • 我认为这是“去检查”中的一个错误。在这种情况下没有歧义(只有一个成员),“去检查”不应该将此报告为问题。与具有不兼容类型的多个成员相同。

标签: go warnings suppress-warnings


【解决方案1】:

您可以禁用它,也可以改为修复代码:

a := A{B: b}

playground

【讨论】:

  • 这不是修复,因为没有错误。这是解决“去检查”中在这个问题上过于虔诚的错误的解决方法。
  • 据我所知,使用无键字段不仅很好,而且对于嵌入式类型非常常见。
  • 我不明白警告试图阻止什么。有人可以解释吗?为什么你需要那里的钥匙?我的结构只有一个参数。
  • @KaMok 主要是因为说几周/几个月后您向结构添加了一个字段,然后使用非键初始化的所有内容都会中断。
  • 你是明星我的朋友!
【解决方案2】:
$ go doc cmd/vet

默认情况下会执行所有检查。如果明确设置了任何标志 为真,只运行那些测试。相反,如果任何标志是 明确设置为 false,只有那些测试被禁用。因此 -printf=true 运行 printf 检查,-printf=false 运行除 printf 检查之外的所有检查。

Unkeyed composite literals

Flag: -composites

Composite struct literals that do not use the field-keyed syntax.

【讨论】:

    【解决方案3】:

    如果您使用的是语言服务器。

    Gopls on by default in the VS Code Go extension

    gopls 通过default.进行审查

    "gopls": {
         "analyses": { "composites": false }
     },
    

    【讨论】:

      【解决方案4】:

      您可以使用-composites=false 标志禁用它:例如,

      go vet -composites=false .
      

      注意:go tool vet 已弃用

      【讨论】:

      • 嗨,这也适用于 VSCode 吗?还是我需要做其他事情?
      • @cruise_lab 添加了一个帖子,因为我必须为 VS Code 完成几个步骤
      【解决方案5】:
      go tool vet -composites=false .
      

      【讨论】:

        【解决方案6】:

        如果你使用的是VS code,你必须在settings下手动设置flag

        settings > Extensions > Go

        向下滚动到“兽医标志”部分

        添加项目并添加标志

        -composites=false .
        

        点击确定。

        再次保存一个文件或重新启动 VS 代码以查看效果。

        【讨论】:

          猜你喜欢
          • 2019-06-30
          • 2018-04-19
          • 2016-06-10
          • 2018-09-02
          • 1970-01-01
          • 2021-08-11
          • 2011-10-24
          • 2015-05-14
          • 2017-05-19
          相关资源
          最近更新 更多