登录
首页 >  Golang >  Go问答

标签的负面建立无法实现预期的效果

来源:stackoverflow

时间:2024-02-17 08:57:24 345浏览 收藏

你在学习Golang相关的知识吗?本文《标签的负面建立无法实现预期的效果》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我有 3 个文件。一个 main 和另外两个 normal gokrazy 应该根据构建约束选择性地构建。两者都在 init() 期间从 main 更新全局变量。 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 兽医 *.go 很高兴。当我运行 go run *.go 时,我看到调用了两个 init 函数:

init: gokrazy
init: normal

我预计只会接到一个电话。 go list 确认已选择预期文件,但我仍然看到两个 init 函数。 golang build constraints random 解释说可能需要强制编译,但这不会改变结果:

❯ go list -f '{{.GoFiles}}' -tags=gokrazy -a && go run -tags=gokrazy -a *.go
[gokrazy.go main.go]
init: gokrazy
init: normal

为什么负 !gokrazy 构建标记不生效?


解决方案


如果您使用 go run *.go,go 实际上会运行所有文件。而是使用:

go run .

例如,如果文件夹中有一个测试文件(main_test.go)并使用 go run *.go,它会抱怨:

go run:无法运行*_test.go文件(main_test.go)

构建标签修改构建的内容(顾名思义)。

对于 go run 来说,构建标签基本上被忽略,无论如何你都不应该使用它(除了 go run . 之外,它太复杂了,无法正确使用)

使用go构建

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《标签的负面建立无法实现预期的效果》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>