实际项目中,读取相关的系统配置文件是很常见的事情。今天就来说一说,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等配置文件...相关推荐

  1. Go-如何读取yaml,json,ini等配置文件

    1. json使用 JSON 应该比较熟悉,它是一种轻量级的数据交换格式.层次结构简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成. 创建 conf.json: {"enabled&qu ...

  2. SpringBoot系列之@PropertySource读取yaml文件

    SpringBoot系列之@PropertySource支持yaml文件读取 最近在做实验,想通过@PropertySource注解读取配置文件的属性,进行映射,习惯上用properties都是测试没 ...

  3. yaml,json,ini这三种格式用来做配置文件优缺点

    适合人类编写:ini > toml > yaml > json > xml > plist 可以存储的数据复杂度:xml > yaml > toml ~ js ...

  4. Golang 入门系列(十一)Go语言实现webapi

    之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...

  5. VBS 请求WebAPI接口_从零开始实现简单的webapi框架【Golang 入门系列十一】

    之前,已经讲过很多Golang的东西,比如基础语法,mysql的使用,redis的使用等等,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/ca ...

  6. Golang 入门系列(十) mysql数据库的使用

    之前,已经讲过一些Golang的基础的东西,感兴趣的可以看看以前的文章,https://www.cnblogs.com/zhangweizhong/category/1275863.html, 今天简 ...

  7. 【Golang 基础系列九】Go 语言的枚举

    概述 将变量的值一一列举出来,变量只限于列举出来的值的范围内取值 Go语言中没有枚举这种数据类型的,但是可以使用const配合iota模式来实现 一.普通枚举 const (cpp = 0java = ...

  8. zookeeper管理mysql_Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)...

    一.使用zookeeper管理远程Mycat配置文件 环境准备: 虚拟机192.168.152.130: zookeeper,具体参考前面文章 虚拟机192.168.152.128: 安装好Mycat ...

  9. C语言入门系列一之C语言介绍、环境配置和运行执行

    鉴于书本和教材文字过多.又难懂的缺点,所以我打算写一系列通俗移动的C语言入门教程,让大家在短时间内学习和掌握C语言,以及遇到C语言的一些问题该如何得到快速的解决.希望这些系列的教程,能够帮助到大家!该 ...

最新文章

  1. U盘挂载,gedit,vi,文本模式中文乱码等等问题
  2. Docker学习笔记_删除某个镜像
  3. 往有序单循环链表的插入元素使原链表依旧有序
  4. 【NLP实战系列】朴素贝叶斯文本分类实战
  5. 装修行业难互联网化?利润不合理并非本质,体制才是
  6. UI debug mode
  7. jquery.cookie.js 使用小结
  8. 前端学习(3184):ant-design的button介绍按钮属性
  9. KVM 通过virsh console连入虚拟机
  10. C#调用Matlab生成的dll方法
  11. 关于updatepanel回传之后JS失效问题
  12. 资源搜索神器 海量精品资源教程 大大啦啦资源神器
  13. 高通平台抓取ramdump并用qcap解析
  14. 360安全桌面 v2.7.0.1060 官方版
  15. 微信自动加好友可以使用python实现
  16. 《圣经》中最让人感动的十句话(转)
  17. ios获得设备处理器cpu类型
  18. 2020校招搜狗笔试
  19. Linux定时清理日志
  20. C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数

热门文章

  1. c# ftp类[转]
  2. wxml 点击图片下载_微信小程序通过ipfs-api 实现图片文件在私有ipfs网络的上传与下载显示...
  3. python3 矩阵运算_3.10 矩阵与线性代数运算
  4. linux从i2c读取变量,I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
  5. linux 路由器去广告,linux – 如何正确发送路由器广告?
  6. 公司--As Imp的写法
  7. 瑞丽噪声与信噪比的关系_演出扩声系统的噪声与接地
  8. python计算数据百分比_概率计算:定义概率分布数据结构,Python实现概率分布计算...
  9. IN-12辉光数码管:俄罗斯进口的器件
  10. 种豆得豆,种瓜得瓜 : 你的网络就是一片自留地