如何在 Go 中处理配置

新手上路,请多包涵

我是 Go 编程的新手,我想知道:处理 Go 程序配置参数的首选方法是什么(在其他情况下可能使用 属性 文件或 ini 文件的那种东西)?

原文由 theglauber 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 765
2 个回答

JSON 格式非常适合我。标准库提供了缩进编写数据结构的方法,因此可读性很强。

另请参阅 此 golang-nuts 线程

JSON 的好处是解析起来相当简单,人类可读/可编辑,同时为列表和映射提供语义(这会变得非常方便),而许多 ini 类型的配置解析器则不是这样。

用法示例:

会议.json

 {
    "Users": ["UserA","UserB"],
    "Groups": ["GroupA"]
}

读取配置的程序

import (
    "encoding/json"
    "os"
    "fmt"
)

type Configuration struct {
    Users    []string
    Groups   []string
}

file, _ := os.Open("conf.json")
defer file.Close()
decoder := json.NewDecoder(file)
configuration := Configuration{}
err := decoder.Decode(&configuration)
if err != nil {
  fmt.Println("error:", err)
}
fmt.Println(configuration.Users) // output: [UserA, UserB]

原文由 nemo 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一种选择是使用 TOML ,这是一种由 Tom Preston-Werner 创建的类似 INI 的格式。我为它构建了一个 经过广泛测试 的 Go 解析器。您可以像此处建议的其他选项一样使用它。例如,如果您在 something.toml 中有此 TOML 数据

Age = 198
Cats = [ "Cauchy", "Plato" ]
Pi = 3.14
Perfection = [ 6, 28, 496, 8128 ]
DOB = 1987-07-05T05:45:00Z

然后你可以用类似的东西将它加载到你的 Go 程序中

type Config struct {
    Age int
    Cats []string
    Pi float64
    Perfection []int
    DOB time.Time
}

var conf Config
if _, err := toml.DecodeFile("something.toml", &conf); err != nil {
    // handle error
}

原文由 BurntSushi5 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏