golang中读取配置文件的包go-ini/ini

思考

首先,在一个初始项目开始前,大家都要思考一下

  1. 各种程序配置,写在代码中好吗?
  2. API的错误码硬编在程序中,合适吗?
  3. DB句柄谁都去open,好吗?
  4. 获取分页等公共参数,不统一管理起来,好吗?
    显然在较正规的项目中,这些问题的答案都是不可以
    [https://github.com/go-ini/ini](https://github.com/go-ini/ini)
    ini中文文档

基本使用步骤

  1. 下载包
    go get gopkg.in/ini.v1
  2. 创建两个文件,my.ini和main.go
  3. 我们编辑 my.ini 文件并输入以下内容
app_mode = development

[paths]
data = /usr/local/ini

[server]
protocol = http
http_port = 9999
enforce_domain = true
  1. 我们编写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")
}
  1. 运行程序,输出
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 = 张三

大功告成,参考文档

posted @ 2022-09-05 10:53  专职  阅读(315)  评论(0编辑  收藏  举报