ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-09-05 11:03:44  阅读:238  来源: 互联网

标签:http Key 配置文件 Section golang ini file go


思考

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

  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 = 张三

大功告成,参考文档

标签:http,Key,配置文件,Section,golang,ini,file,go
来源: https://www.cnblogs.com/mayanan/p/16657341.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有