负构建标记未按预期工作

我有3个文件。一个和两个额外的~are~应该根据构建约束来构建。两者都从 期间更新全局变量。 是mainnormalgokrazymaininit()normal


// +build !gokrazy


package main


import "fmt"


func init() {

    foo = "normal"

    fmt.Println("init:", foo)

}

另一个是:gokrazy


// +build gokrazy


package main


import "fmt"


func init() {

    foo = "gokrazy"

    fmt.Println("init:", foo)

}

go vet *.go很开心。当我运行时,我看到两个初始化函数都被调用:go run *.go


init: gokrazy

init: normal

我以为只有一个人被叫到。 确认选择了预期的文件,但是我仍然看到两个init函数。Golang Build Constraints Random解释说,强制编译可能是必要的,但这不会改变结果:go list


❯ go list -f '{{.GoFiles}}' -tags=gokrazy -a && go run -tags=gokrazy -a *.go

[gokrazy.go main.go]

init: gokrazy

init: normal

为什么负构建标记不起作用?!gokrazy


犯罪嫌疑人X
浏览 107回答 2
2回答

胡子哥哥

如果你使用,Go实际上会运行所有文件。请改用:go run *.gogo run .例如,如果您在文件夹中有一个测试文件()并使用 ,它会抱怨:main_test.gogo run *.gogo run: 無法運行 *_test.go files (main_test.go)

噜噜哒

构建标记修改构建的内容(顾名思义)。构建标签基本上被忽略了,你无论如何都不应该使用它(它太复杂了,除非go rungo run .)用。go build
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go