如何优雅地在golang中创建配置文件?

时间:2015-01-27 18:00:03

标签: go redis config

我是go lang的新手, 我只想编写一个程序来管理我的redis实例,以便我可以使用特定的配置文件创建一个redis,但我不知道如何优雅地为redis实例创建配置文件。

我发现" text / template"之前,这是一个好主意吗?

非常感谢

5 个答案:

答案 0 :(得分:6)

这取决于您要为这些配置支持的文件格式。

一个能够读取大部分格式的库(从简单的ini文件到JSON文件)将是spf13/viper

  

Viper是针对go应用程序的完整配置解决方案。它被设计为在应用程序中工作以处理所有类型的配置。它支持

     
      
  • 设置默认值
  •   
  • 从yaml,toml和json配置文件中读取
  •   
  • 从环境变量中读取
  •   
  • 从远程配置系统(Etcd或Consul)读取
  •   
  • 从命令行标志中读取
  •   
  • 设置显式值
  •   

答案 1 :(得分:4)

Redis configuration files有一个简单的文字格式。您可以使用fmt软件包生成配置文件:

fmt.Fprintf(w, "pidfile %s\n", pidFile)
fmt.Fprintf(w, "port %d\n", port)

输出wio.Writer

文本/模板包也是一个可行的选择。给出模板

pidfile {{.PidFile}}
port {{.Port}}

你可以用

执行它
t.Execute(w, map[string]interface{}{
   "PidFile": pidFile,
   "Port": port,
})

答案 2 :(得分:0)

由于redis配置文件具有非常简单的结构,我建议您查看编码/ csv包,并将Reader.Comma分隔符设置为空格。它允许您轻松读取,解析和写入配置。在我看来“奴隶{{。主机}} {{.Port}}”因为模板看起来不太方便。但这肯定是正确的方法。只是品味问题。

答案 3 :(得分:0)

如果要为开发,测试,登台和生产制作配置文件,我建议使用Go提供的// +build可能性。


设置您的Go程序

您可以在config包中创建4个文件,如下所示:

src/program/config
               |
               |--config_dev.go
               |--config_test.go
               |--config_staging.go
               |--config_prod.go

在配置文件中

然后在每个文件中,定义在go build(或运行,...)过程中使用该文件的标签。

这意味着例如在 config_dev.go 中:

// +build dev

package config

// Development ready configuration const based on the build tags.
const (
    MYSETTINGS = "dev blablabla"
    ISREADY    = false
)

config_test.go 中,它看起来像:

// +build test

package config

// Development ready configuration const based on the build tags.
const (
    MYSETTINGS = "test blablabla"
    ISREADY    = true
)

请注意// +build dev// +build test

在构建过程中将使用这些标签来告诉您要使用哪个配置文件。

在任何其他Go文件中,您只需调用config.ISREADY即可,而无需在文件中导入"config"以外的任何内容。


构建

然后要构建您的应用,只需运行:

go build -tags dev使用开发配置

进行构建

go build -tags test以使用测试配置构建。

答案 4 :(得分:-1)

我建议使用一些配置库。我喜欢Viper是完整的。