从ini配置文件中读取服务器配置,是开发中常见的任务,这种从文件中读取固定配置和从配置中心读取统一配置,可以相互配合,给运维提供灵活的方法,本文记录使用gcfg组件读取ini文件的简单方法。
1. 定义读取结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import ( log "github.com/sirupsen/logrus" "gopkg.in/gcfg.v1" )
type EProductMode string
const ( ENone EProductMode = "" EDebug EProductMode = "debug" ERelease EProductMode = "release" )
type Common struct { ProductMode EProductMode }
type Mysql struct { Host string Port int Username string Password string DB string }
type Redis struct { Host string Port int }
type AppConfig struct { Common Common Mysql Mysql Redis Redis }
|
2. 从文件中读取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| var g_config *AppConfig
var configFile = "app.conf"
func init() { dconfig := &AppConfig{} err := gcfg.ReadFileInto(dconfig, configFile) if err != nil { log.Errorf("Load %s Failed:%v", configFile, err) return } g_config = dconfig }
func Get() *AppConfig { return g_config }
|
3.ini文件格式
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Common] ProductMode = "debug"
[Mysql] host = 127.0.0.1 port = 3306 username = "root" password = "123456" db = "chess"
[Redis] host = 127.0.0.1 port = 8888
|
定义的每个节是用来区分不同的模块使用的。
结语
ini文件节对应golang定义的结构,不然读取会fatal,布尔型定义为true或者false;文件的编码格式默认为utf8的,文件不能为空.详细细节参见源码主页的文档。gcfg的github源