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