为什么“ go vet”仅在某些版本的Go中抱怨?

poo*_*Dev 1 go

今天,我在构建go服务的管道中包括了“ go vet”。我想知道为什么go vet本地计算机上的输出与CI服务器上运行的输出不同。

我发现go版本有所不同-至少有点不同。我的本地Go版本是1.12.4,配置项是1.12.7。这个事实可以解释不同的行为,但是我不明白为什么会发生这种情况!

有气味:

type Something struct {
    ...
    BatteryNumber string    `json:"number"`
    ...
}

type SomethingWithBattery struct {
    Something
    Number            string   `json:"number"`
    ...
}
Run Code Online (Sandbox Code Playgroud)

因此,在struct标记中是“数字”的两倍,因为Something-struct嵌套SomethingWithBattery-1.12.4抱怨,而1.12.7则没有。为什么?

pet*_*rSO 5

Go 1和Go程序的未来

工具类

最后,Go工具链(编译器,链接器,构建工具等)正在积极开发中,并且可能会改变行为。例如,这意味着依赖工具的位置和属性的脚本可能会因发布点而中断。


go vet正在积极开发中,最近已被重写。没有工具的兼容性保证,只有语言。


cmd / vet:考虑还原嵌入字段的标签冲突#30465

由于对带有json标签的嵌入式字段进行了预期的阴影,因此vet失败。


此外,错误修复已应用于Go工具。例如,发行30465