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

时间:2019-08-09 10:41:07

标签: 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"`
    ...
}

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

1 个答案:

答案 0 :(得分:5)

  

Go 1 and the Future of Go Programs

     

Tools

     

最后,使用Go工具链(编译器,链接器,构建工具等)   正在积极开发中,可能会改变行为。这意味着   实例,这些脚本取决于   这些工具可能会因点释放而损坏。


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


  

cmd/vet: Consider reverting tag conflict for embedded fields #30465

     

go vet由于使用json嵌入字段的预期阴影而失败   标签。


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