处理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是非常好的配置文件库。