今天,我在构建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则没有。为什么?
答案 0 :(得分:5)
Go 1 and the Future of Go Programs
最后,使用Go工具链(编译器,链接器,构建工具等) 正在积极开发中,可能会改变行为。这意味着 实例,这些脚本取决于 这些工具可能会因点释放而损坏。
go vet
正在积极开发中,最近已被重写。没有工具的兼容性保证,只有语言。
cmd/vet: Consider reverting tag conflict for embedded fields #30465
go vet由于使用json嵌入字段的预期阴影而失败 标签。
此外,错误修复已应用于Go工具。例如,Issue 30465。