Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件...
实际项目中,读取相关的系统配置文件是很常见的事情。今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的。
1. json使用
JSON 应该比较熟悉,它是一种轻量级的数据交换格式。层次结构简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成。
1. 创建 conf.json:
{ "enabled": true, "path": "/usr/local" }
2. 新建config_json.go:
package mainimport ("encoding/json""fmt""os" )type configuration struct {Enabled boolPath string }func main() {// 打开文件file, _ := os.Open("conf.json")// 关闭文件 defer file.Close()//NewDecoder创建一个从file读取并解码json对象的*Decoder,解码器有自己的缓冲,并可能超前读取部分json数据。decoder := json.NewDecoder(file)conf := configuration{}//Decode从输入流读取下一个json编码值并保存在v指向的值里err := decoder.Decode(&conf)if err != nil {fmt.Println("Error:", err)}fmt.Println("path:" + conf.Path) }
启动运行后,输出如下:
D:\Go_Path\go\src\configmgr>go run config_json.go path:/usr/local
2. ini的使用
INI文件格式是某些平台或软件上的配置文件的非正式标准,由节(section)和键(key)构成,比较常用于微软Windows操作系统中。这种配置文件的文件扩展名为INI。
1. 创建 conf.ini:
[Section] enabled = true path = /usr/local # another comment
2.下载第三方库:go get gopkg.in/gcfg.v1
3. 新建 config_ini.go:
package mainimport ("fmt"gcfg "gopkg.in/gcfg.v1" )func main() {config := struct {Section struct {Enabled boolPath string}}{}err := gcfg.ReadFileInto(&config, "conf.ini")if err != nil {fmt.Println("Failed to parse config file: %s", err)}fmt.Println(config.Section.Enabled)fmt.Println(config.Section.Path) }
启动运行后,输出如下:
D:\Go_Path\go\src\configmgr>go run config_ini.go true /usr/local
3. yaml使用
yaml 可能比较陌生一点,但是最近却越来越流行。也就是一种标记语言。层次结构也特别简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成。
golang的标准库中暂时没有给我们提供操作yaml的标准库,但是github上有很多优秀的第三方库开源给我们使用。
1. 创建 conf.yaml:
enabled: true path: /usr/local
2. 下载第三方库:go get gopkg.in/yaml.v2
3. 创建 config_yaml.go:
package mainimport ("fmt""io/ioutil""log""gopkg.in/yaml.v2" )type conf struct {Enabled bool `yaml:"enabled"` //yaml:yaml格式 enabled:属性的为enabledPath string `yaml:"path"` }func (c *conf) getConf() *conf {yamlFile, err := ioutil.ReadFile("conf.yaml")if err != nil {log.Printf("yamlFile.Get err #%v ", err)}err = yaml.Unmarshal(yamlFile, c)if err != nil {log.Fatalf("Unmarshal: %v", err)}return c }func main() {var c confc.getConf()fmt.Println("path:" + c.Path) }
启动运行后,输出如下:
D:\Go_Path\go\src\configmgr>go run config_yaml.go path:/usr/local
最后
以上,就把golang 读取配置文件的方法,都介绍完了。大家可以拿着代码运行起来看看。
Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件...相关推荐
- Go-如何读取yaml,json,ini等配置文件
1. json使用 JSON 应该比较熟悉,它是一种轻量级的数据交换格式.层次结构简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成. 创建 conf.json: {"enabled&qu ...
- SpringBoot系列之@PropertySource读取yaml文件
SpringBoot系列之@PropertySource支持yaml文件读取 最近在做实验,想通过@PropertySource注解读取配置文件的属性,进行映射,习惯上用properties都是测试没 ...
- yaml,json,ini这三种格式用来做配置文件优缺点
适合人类编写:ini > toml > yaml > json > xml > plist 可以存储的数据复杂度:xml > yaml > toml ~ js ...
- Golang 入门系列(十一)Go语言实现webapi
之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...
- VBS 请求WebAPI接口_从零开始实现简单的webapi框架【Golang 入门系列十一】
之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...
- Golang 入门系列(十) mysql数据库的使用
之前,已经讲过一些Golang的基础的东西,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 今天简 ...
- 【Golang 基础系列九】Go 语言的枚举
概述 将变量的值一一列举出来,变量只限于列举出来的值的范围内取值 Go语言中没有枚举这种数据类型的,但是可以使用const配合iota模式来实现 一.普通枚举 const (cpp = 0java = ...
- zookeeper管理mysql_Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)...
一.使用zookeeper管理远程Mycat配置文件 环境准备: 虚拟机192.168.152.130: zookeeper,具体参考前面文章 虚拟机192.168.152.128: 安装好Mycat ...
- C语言入门系列一之C语言介绍、环境配置和运行执行
鉴于书本和教材文字过多.又难懂的缺点,所以我打算写一系列通俗移动的C语言入门教程,让大家在短时间内学习和掌握C语言,以及遇到C语言的一些问题该如何得到快速的解决.希望这些系列的教程,能够帮助到大家!该 ...
最新文章
- U盘挂载,gedit,vi,文本模式中文乱码等等问题
- Docker学习笔记_删除某个镜像
- 往有序单循环链表的插入元素使原链表依旧有序
- 【NLP实战系列】朴素贝叶斯文本分类实战
- 装修行业难互联网化?利润不合理并非本质,体制才是
- UI debug mode
- jquery.cookie.js 使用小结
- 前端学习(3184):ant-design的button介绍按钮属性
- KVM 通过virsh console连入虚拟机
- C#调用Matlab生成的dll方法
- 关于updatepanel回传之后JS失效问题
- 资源搜索神器 海量精品资源教程 大大啦啦资源神器
- 高通平台抓取ramdump并用qcap解析
- 360安全桌面 v2.7.0.1060 官方版
- 微信自动加好友可以使用python实现
- 《圣经》中最让人感动的十句话(转)
- ios获得设备处理器cpu类型
- 2020校招搜狗笔试
- Linux定时清理日志
- C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数
热门文章
- c# ftp类[转]
- wxml 点击图片下载_微信小程序通过ipfs-api 实现图片文件在私有ipfs网络的上传与下载显示...
- python3 矩阵运算_3.10 矩阵与线性代数运算
- linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
- linux 路由器去广告,linux – 如何正确发送路由器广告?
- 公司--As Imp的写法
- 瑞丽噪声与信噪比的关系_演出扩声系统的噪声与接地
- python计算数据百分比_概率计算:定义概率分布数据结构,Python实现概率分布计算...
- IN-12辉光数码管:俄罗斯进口的器件
- 种豆得豆,种瓜得瓜 : 你的网络就是一片自留地