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

今天,我将“go vet”纳入了构建 Go 服务的管道之一。我想知道为什么go vet我本地机器上的输出与 CI 服务器上运行的输出不同。


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


有气味:


type Something struct {

    ...

    BatteryNumber string    `json:"number"`

    ...

}


type SomethingWithBattery struct {

    Something

    Number            string   `json:"number"`

    ...

}

因此,在结构标签中使用两次“数字”,因为 Something-struct 嵌套 SomethingWithBattery - 1.12.4 抱怨,1.12.7 则不然。为什么?


梦里花落0921
浏览 80回答 1
1回答

肥皂起泡泡

Go 1 和 Go 程序的未来工具最后,Go 工具链(编译器、链接器、构建工具等)正在积极开发中,可能会改变行为。例如,这意味着依赖于工具的位置和属性的脚本可能会被单点版本破坏。go vet正在积极开发中,最近已被重写。工具没有兼容性保证,只有语言。cmd/vet:考虑恢复嵌入字段的标签冲突#30465go vet 由于有意使用 json 标签隐藏嵌入字段而失败。此外,Go 工具还修复了错误。例如,问题 30465。
打开App,查看更多内容
随时随地看视频慕课网APP