我想在init函数中执行这两行中的一行
func init() {
log.SetPrefix(">>>>>>>>>>>>> ")
log.SetOutput(ioutil.Discard)
}
Run Code Online (Sandbox Code Playgroud)
如何在make文件中实现与C和宏定义类似的东西?我像go build my_project一样构建go程序,我没有任何自定义make文件.我可以传递构建命令标志并读取内部代码吗?
创建一个可以测试的字符串变量.然后使用-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")
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你用它来构建它go build,那MODE将是"".但你也可以用这种方式构建它:
go build -ldflags "-X main.MODE PROD"
Run Code Online (Sandbox Code Playgroud)
现在MODE将是"PROD".您可以使用它来根据构建设置修改逻辑.我通常使用这种技术在二进制文件中设置版本号; 但它可以用于各种构建时配置.请注意,它只能设置字符串.所以你不能做MODE一个bool或整数.
您也可以使用标签来实现这一点,标签设置稍微复杂一些,但功能更强大.创建三个文件:
package main
func main() {
doThing()
}
Run Code Online (Sandbox Code Playgroud)
// +build prod
package main
func doThing() {
println("I'm in prod mode")
}
Run Code Online (Sandbox Code Playgroud)
// +build !prod
package main
func doThing() {
println("I'm NOT in prod mode")
}
Run Code Online (Sandbox Code Playgroud)
现在,当你构建时go build,你将获得你的main_devel.go版本(文件名无关紧要;只是// +build !prod顶部的行).但是你可以通过构建来获得生产构建go build -tags prod.
请参阅构建文档中的"构建约束"一节.