版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/linux_player_c/article/details/82118837
golang读取配置文件
使用golang编写web服务,常常需要配置很多信息,常见的配置文件格式有.ini,json文件,yaml和toml等.本文将会介绍使用golang读取toml格式的文本信息.
我们以mysql和gin的配置信息为例作为说明.
使用toml记录配置信息
TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析.
mysql和gin的配置信息都可以存放在toml中,具体的格式如下:
debug = true
salt = "6rjxs0s49cxnzzrij68fzl76in8zp53h"
# config
[http]
enaled = true
listen = "0.0.0.0:10080"
# mysql config
[mysql]
datasource = "@tcp(127.0.0.1:3306)/test?charset=utf8&&loc=Asia%2FShanghai&parseTime=true"
user = "test"
passwd = "suPrjMI67ph5M1SMuex0YXjtgN3L4XF+"
max_idle = 10
max_open = 100
在golang的代码中我们需要构建一个和文件层级关系类似的结构体,具体信息如下所示:
type configStruct struct {
Debug bool `toml:"debug"`
Salt string `toml:"salt"`
Http struct{
Enabled bool `toml:"enabled"`
Listen string `toml:"listen"`
}
Db struct{
Datasource string `toml:"datasource"`
Host string `toml:"host"`
Port int `toml:"port"`
User string `toml:"user"`
Passwd string `toml:"passwd"`
MaxIdle int `toml:"max_idle"`
MaxOpen int `toml:"max_open"`
} `toml:"mysql"`
Aws struct{
ConfigFilePath string `toml:"config_file_path"`
} `toml:"aws"`
}
最后面的toml描述了结构体对应的配置文件的关键字.
其实所要做的事情非常简单:
1.编写配置文件信息;
2.根据配置文件编写相应的结构体;
3.根据toml的方式读取配置文件,然后赋予这个结构体;
4.把获取的信息设置给指定的服务即可.
剩下的关键操作如下:
3.根据toml的方式读取配置文件,然后赋予这个结构体;
var C *configStruct
configFile := fmt.Sprintf("./config/%s_cfg.toml", filename)
if _, err := toml.DecodeFile(configFile, &C); err != nil {
log.Fatalln(err)
}
4.把获取的信息设置给指定的服务即可.
使用gorm连接数据库:
func InitDb() {
var err error
if Db, err = gorm.Open("mysql", config.C.Db.Datasource); err != nil {
log.Fatalln(err)
}
// set max_idle and max_open connect
Db.DB().SetMaxIdleConns(config.C.Db.MaxIdle)
Db.DB().SetMaxOpenConns(config.C.Db.MaxOpen)
Db.SingularTable(true)
if config.C.Debug == true {
Db.LogMode(true)
}
}
使用gin框架提供web服务:
// not debug
if !config.C.Debug {
gin.SetMode(gin.ReleaseMode)
}
router := gin.Default()
route.ConfigRouter(router)
log.Fatalln(router.Run(config.C.Http.Listen))
小结
一般来讲,我们建议把配置文件单独写在一个目录中,如下格式:
并且对开发环境和正式环境做区分,在命令行传入对应的参数,让程序可以读取合适的配置文件(线上或测试).