今天,我在构建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则没有。为什么?
最后,Go工具链(编译器,链接器,构建工具等)正在积极开发中,并且可能会改变行为。例如,这意味着依赖工具的位置和属性的脚本可能会因发布点而中断。
go vet正在积极开发中,最近已被重写。没有工具的兼容性保证,只有语言。
由于对带有json标签的嵌入式字段进行了预期的阴影,因此vet失败。
此外,错误修复已应用于Go工具。例如,发行30465。