处理Go程序的配置参数的首选方法是什么(在其他上下文中可能使用属性文件或ini文件的那种东西)?
当前回答
我已经开始使用Gcfg,它使用类似ini的文件。它很简单——如果你想要一些简单的东西,这是一个很好的选择。
下面是我目前使用的加载代码,它有默认设置,并允许命令行标志(未显示)覆盖我的一些配置:
package util
import (
"code.google.com/p/gcfg"
)
type Config struct {
Port int
Verbose bool
AccessLog string
ErrorLog string
DbDriver string
DbConnection string
DbTblPrefix string
}
type configFile struct {
Server Config
}
const defaultConfig = `
[server]
port = 8000
verbose = false
accessLog = -
errorLog = -
dbDriver = mysql
dbConnection = testuser:TestPasswd9@/test
dbTblPrefix =
`
func LoadConfiguration(cfgFile string, port int, verbose bool) Config {
var err error
var cfg configFile
if cfgFile != "" {
err = gcfg.ReadFileInto(&cfg, cfgFile)
} else {
err = gcfg.ReadStringInto(&cfg, defaultConfig)
}
PanicOnError(err)
if port != 0 {
cfg.Server.Port = port
}
if verbose {
cfg.Server.Verbose = true
}
return cfg.Server
}
其他回答
Viper是一个golang配置管理系统,可以使用JSON、YAML和TOML。看起来很有趣。
我同意尼莫,我写了一个小工具,让这一切都很容易。
Bitbucket.org/gotamer/cfg是一个json配置包
将应用程序中的配置项定义为结构。 在第一次运行时保存struct中的json配置文件模板 您可以保存对配置的运行时修改
看医生。举个例子
看看贡菲
// load
config, _ := gonfig.FromJson(myJsonFile)
// read with defaults
host, _ := config.GetString("service/host", "localhost")
port, _ := config.GetInt("service/port", 80)
test, _ := config.GetBool("service/testing", false)
rate, _ := config.GetFloat("service/rate", 0.0)
// parse section into target structure
config.GetAs("service/template", &template)
像本文一样使用toml读取配置文件
https://github.com/spf13/viper和https://github.com/zpatrick/go-config是非常好的配置文件库。