我知道我可以在Go中使用编译器标志变量,但是如何为常量使用?
我想在编译时设置一些常量,比如数据库集,如:
package db_info
var Deploy string
const DbType = "mysql"
const DbUser = "my_user"
const Db = "my_db"
const DbPort = "3306"
if Deploy == "staging" {
const DbPassword = "my_pwd_stg"
const DbHost = "db.url.com"
} else if Deploy == "production" {
const DbPassword = "my_pwd_prd"
const DbHost = "db.url.com"
} else {
const DbPassword = "pwd"
const DbHost = "127.0.0.1"
}
如何正确完成?就像我得到的那样:
syntax error: non-declaration statement outside function body
答案 0 :(得分:3)
你做不到。它会破坏范围规则。你会期望常量是全局可见的,但它们是在一个块中定义的。
我只是将这些值作为程序参数或环境变量传递。
另一方面,正如您所提到的,您可以在编译时修改字符串变量。使用-ldflags
来执行此操作。
go run -ldflags="-X main.who=Something" hello.go
在
package main
import "fmt"
var who = "World"
func main() {
fmt.Printf("Hello, %s.\n", who)
}
请参阅https://blog.cloudflare.com/setting-go-variables-at-compile-time/