golang中读取配置文件的包go-ini/ini
思考
首先,在一个初始项目开始前,大家都要思考一下
- 各种程序配置,写在代码中好吗?
- API的错误码硬编在程序中,合适吗?
- DB句柄谁都去open,好吗?
- 获取分页等公共参数,不统一管理起来,好吗?
显然在较正规的项目中,这些问题的答案都是不可以
[https://github.com/go-ini/ini](https://github.com/go-ini/ini)
ini中文文档
基本使用步骤
- 下载包
go get gopkg.in/ini.v1
- 创建两个文件,my.ini和main.go
- 我们编辑 my.ini 文件并输入以下内容
app_mode = development
[paths]
data = /usr/local/ini
[server]
protocol = http
http_port = 9999
enforce_domain = true
- 我们编写main.go文件:
func main() {
file, err := ini.Load("../my.ini")
if err != nil {
log.Println("加载配置文件失败")
os.Exit(1)
}
// 典型读取操作,默认分区可以使用空字符串表示
fmt.Println("app_mode:", file.Section("").Key("app_mode").String())
fmt.Println("paths[data]:", file.Section("paths").Key("data").String())
// 我们可以做一些候选值限制的操作
fmt.Println(file.Section("server").Key("protocol").In("http", []string{"http", "https"}))
// 如果读取的值不在候选列表内,则会回退使用提供的默认值
fmt.Println(file.Section("server").Key("protocol").In("smtp", []string{"imap", "smtp"}))
// 试一试自动类型转换
fmt.Printf("%[1]T, %[1]d\n", file.Section("server").Key("http_port").MustInt(9999))
// 差不多了,修改某个值,然后进行保存
file.Section("").Key("app_mode").SetValue("production") // 修改原来的值
file.Section("db").Key("username").SetValue("张三") // 新增值
_ = file.SaveTo("../my.ini.local")
}
- 运行程序,输出
app_mode: development
paths[data]: /usr/local/ini
http
smtp
int, 9999
同时,还会将更改的和新增的配置从新写入到新的配置文件my.ini.local中:
app_mode = production
[paths]
data = /usr/local/ini
[server]
protocol = http
http_port = 9999
enforce_domain = true
[db]
username = 张三
大功告成,参考文档