首页 > 其他分享 >golang中读取配置文件的包go-ini/ini

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

时间:2022-09-05 11:03:06浏览次数:96  
标签: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
From: https://www.cnblogs.com/mayanan/p/16657341.html

相关文章

  • 通过 Infinity 和 -Infinity 查找数组中最大和最小值
    functionfindMaxNum(numbers){letmax=-Infinity;for(constnofnumbers){if(n>max){max=n;}}returnmax;}functionfindMi......
  • 大家都能看得懂的源码之ahooks useInfiniteScroll
    本文是深入浅出ahooks源码系列文章的第十七篇,该系列已整理成文档-地址。觉得还不错,给个star支持一下哈,Thanks。简介useInfiniteScroll封装了常见的无限滚动逻辑。......
  • mysql 报错This function has none of DETERMINISTIC解决方案
    本文章向朋友们介绍开启bin-log日志mysql报错:ThisfunctionhasnoneofDETERMINISTIC,NOSQL解决办法,创建存储过程时出错信息:ERROR1418(HY000):Thisfunctionh......
  • LIME模型---"Why Should I Trust You?": Explaining the Predictions of Any Classifi
    文章核心思想速读:提出了一个LIME解释技术能够对任何分类器做出的预测进行解释。L指LOCAL,意思是模型是针对局部某个样本的解释,而不是所有样本I指:INTERPRETABLE,可解释性,能......
  • shopee golang开发一面
    1、有环链表一个有环的链表,如何确认链表有环,环的长度。2、hashmap设计一个hashmap,你要用什么数据结构能用数组能做为存储hashmap的数据结构吗?不能的话,要怎么做?怎么解决......
  • golang面试经验2
    1、make和new的区别? 宝典导航2、了解过golang的内存管理吗?宝典导航3、调用函数传入结构体时,应该传值还是指针?说出你的理由?宝典导航4、线程有几种模型?宝典导航5、Go......
  • golang面试题2
    1、go方法值接收者和指针接收者结论:如果方法的接收者是指针类型,无论调用者是对象还是对象指针,修改的都是对象本身,会影响调用者      如果方法的接收者是值类......
  • LogBack配置文件
    使用注意更改文件生成和读取路径<?xmlversion="1.0"encoding="UTF-8"?><configuration><!-- CONSOLE:表示当前日志信息时可以输出控制台的。--><appendername......
  • 14.配置文件-yaml
    YAML是"YAMLAin'tMarkupLanguage"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:"YetAnotherMarkupLanguage"(仍是一种标记语言)。非常适合......
  • 13.开发小技巧-Spring Initailizr(项目初始化向导)
    选择我们需要的开发场景  勾选场景后就自动导入了依赖  自动创建项目结构  自动编写好主配置类   ......