禁用针对"复合文字使用无键字段"的兽医检查

Mat*_*ner 23 warnings go suppress-warnings

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

composite literal uses unkeyed fields
Run Code Online (Sandbox Code Playgroud)

因为我在实例化

type A struct {
   *B
}
Run Code Online (Sandbox Code Playgroud)

像这样:

A{b} // b is of type *B
Run Code Online (Sandbox Code Playgroud)

我不关心这个警告,并希望在我的兽医检查中禁用它.我该怎么做呢?

One*_*One 45

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

a := A{B: b}
Run Code Online (Sandbox Code Playgroud)

playground

  • 这不是一个修复,因为没有错误.这是针对"go vet"中的一个错误的解决方法,这个错误在这个问题上过于虔诚. (12认同)
  • @KaMok主要是因为说几周/几个月后你在结构中添加了一个字段,那么使用unkeyed初始化的所有东西都会破坏. (10认同)
  • 据我所知,使用无键字段不仅很好,而且是嵌入式类型的常见做法. (3认同)
  • 有时不加钥匙是个好主意。如果您使用键控,并且几周/几个月后您向结构添加一个字段,您可能希望中断初始化代码以查看需要更新初始化代码的位置。 (2认同)

pet*_*rSO 22

$ go doc cmd/vet
Run Code Online (Sandbox Code Playgroud)

默认情况下,执行所有检查.如果任何标志显式设置为true,则仅运行那些测试.相反,如果任何标志显式设置为false,则仅禁用那些测试.因此-printf = true运行printf检查,-printf = false运行除printf检查之外的所有检查.

Unkeyed composite literals

Flag: -composites

Composite struct literals that do not use the field-keyed syntax.
Run Code Online (Sandbox Code Playgroud)


Зел*_*ный 6

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

Gopls on by default in the VS Code Go extension

gopls 默认情况下会进行兽医检查

"gopls": {
     "analyses": { "composites": false }
 },
Run Code Online (Sandbox Code Playgroud)


dee*_*ssn 5

如果您使用 VS code,则必须在设置下手动设置该标志

settings > Extensions > Go

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

在此输入图像描述

添加项目并添加标志

-composites=false .
Run Code Online (Sandbox Code Playgroud)

单击“确定”。

再次保存您的文件之一或重新启动 VS code 以查看效果。