Go 我可以传递到build命令标志并读取内部代码吗?

Go 我可以传递到build命令标志并读取内部代码吗?,go,Go,我想在init函数中执行这两行中的一行 func init() { log.SetPrefix(">>>>>>>>>>>>> ") log.SetOutput(ioutil.Discard) } 如何在make文件中实现类似于C和宏定义的东西? 我像GoBuildMy_项目一样构建go程序,并且没有任何定制文件。我可以传递到build命令标志并读取内部代码吗?创建一个可以测试的字符串变量。然后

我想在init函数中执行这两行中的一行

func init() {
    log.SetPrefix(">>>>>>>>>>>>>   ")


    log.SetOutput(ioutil.Discard)
}
如何在make文件中实现类似于C和宏定义的东西?
我像GoBuildMy_项目一样构建go程序,并且没有任何定制文件。我可以传递到build命令标志并读取内部代码吗?

创建一个可以测试的字符串变量。然后使用传递给链接器的-X设置该字符串变量。例如:

package main

var MODE string

func main() {
    if MODE == "PROD" {
        println("I'm in prod mode")
    } else {
        println("I'm NOT in prod mode")
    }

}
现在,如果你用just go build构建这个,模式将是。但您也可以这样构建它:

go build -ldflags "-X main.MODE PROD"
现在模式将是PROD。您可以使用它根据构建设置修改逻辑。我通常使用这种技术在二进制中设置版本号;但它可以用于所有类型的构建时配置。请注意,它只能设置字符串。所以你不能使模式成为布尔或整数

您还可以通过标记来实现这一点,标记的设置稍微复杂一些,但功能要强大得多。创建三个文件:

梅因,加油 主生产线 干道 现在,当您使用go build进行构建时,您将获得您的main_devel.go版本文件名不重要;只是//+构建!顶部的生产线。但是您可以通过使用go build-tags prod进行构建来获得生产构建


请参阅文档中有关生成约束的部分。

创建一个可以测试的字符串变量。然后使用传递给链接器的-X设置该字符串变量。例如:

package main

var MODE string

func main() {
    if MODE == "PROD" {
        println("I'm in prod mode")
    } else {
        println("I'm NOT in prod mode")
    }

}
现在,如果你用just go build构建这个,模式将是。但您也可以这样构建它:

go build -ldflags "-X main.MODE PROD"
现在模式将是PROD。您可以使用它根据构建设置修改逻辑。我通常使用这种技术在二进制中设置版本号;但它可以用于所有类型的构建时配置。请注意,它只能设置字符串。所以你不能使模式成为布尔或整数

您还可以通过标记来实现这一点,标记的设置稍微复杂一些,但功能要强大得多。创建三个文件:

梅因,加油 主生产线 干道 现在,当您使用go build进行构建时,您将获得您的main_devel.go版本文件名不重要;只是//+构建!顶部的生产线。但是您可以通过使用go build-tags prod进行构建来获得生产构建


请参阅文档中有关生成约束的部分。

请参阅中的生成约束部分。但请先考虑另一种解决方案,可能是命令行标志?。Go不是C。请参阅中的“构建约束”一节。但请先考虑另一种解决方案,可能是命令行标志?。Go不是C。很高兴我看到了这个答案!我正准备研究如何在Go中专门针对版本号和提交构建时的标记执行类似的操作!很高兴我看到了这个答案!我正准备研究如何在Go中专门针对版本号和提交构建时的标记执行类似的操作!
// +build !prod

package main

func doThing() {
    println("I'm NOT in prod mode")
}