Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件

实际项目中,读取相关的系统配置文件是很常见的事情。今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的。

1. json使用

JSON 应该比较熟悉,它是一种轻量级的数据交换格式。层次结构简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成。

  1. 创建 conf.json:

1{ 2"enabled": true, 3"path": "/usr/local" 4}

  2. 新建config_json.go:

1package main 2 3import ( 4 "encoding/json" 5 "fmt" 6 "os" 7) 8 9type configuration struct { 10 Enabled bool 11 Path string 12} 13 14func main() { 15 // 打开文件 16 file, _ := os.Open("conf.json") 17 18 // 关闭文件 19 defer file.Close() 20 21 //NewDecoder创建一个从file读取并解码json对象的*Decoder,解码器有自己的缓冲,并可能超前读取部分json数据。 22 decoder := json.NewDecoder(file) 23 24 conf := configuration{} 25 //Decode从输入流读取下一个json编码值并保存在v指向的值里 26 err := decoder.Decode(&conf) 27 if err != nil { 28 fmt.Println("Error:", err) 29 } 30 fmt.Println("path:" + conf.Path) 31}

  启动运行后,输出如下:

1D:\Go_Path\go\src\configmgr>go run config_json.go 2path:/usr/local

2. ini的使用

INI文件格式是某些平台或软件上的配置文件的非正式标准,由节(section)和键(key)构成,比较常用于微软Windows操作系统中。这种配置文件的文件扩展名为INI。

  1. 创建 conf.ini:

1[Section] 2enabled = true 3path = /usr/local # another comment

  2.下载第三方库:go get gopkg.in/gcfg.v1

  3. 新建 config_ini.go:

1package main 2 3import ( 4 "fmt" 5 gcfg "gopkg.in/gcfg.v1" 6) 7 8func main() { 9 config := struct { 10 Section struct { 11 Enabled bool 12 Path string 13 } 14 }{} 15 16 err := gcfg.ReadFileInto(&config, "conf.ini") 17 18 if err != nil { 19 fmt.Println("Failed to parse config file: %s", err) 20 } 21 fmt.Println(config.Section.Enabled) 22 fmt.Println(config.Section.Path) 23}

  启动运行后,输出如下:

1D:\Go_Path\go\src\configmgr>go run config_ini.go 2true 3/usr/local

3. yaml使用

yaml 可能比较陌生一点,但是最近却越来越流行。也就是一种标记语言。层次结构也特别简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成。

golang的标准库中暂时没有给我们提供操作yaml的标准库,但是github上有很多优秀的第三方库开源给我们使用。

  1. 创建 conf.yaml:

1enabled: true 2path: /usr/local

  2. 下载第三方库:go get  gopkg.in/yaml.v2

  3. 创建 config_yaml.go:

1package main 2 3import ( 4 "fmt" 5 "io/ioutil" 6 "log" 7 8 "gopkg.in/yaml.v2" 9) 10 11type conf struct { 12 Enabled bool `yaml:"enabled"` //yaml:yaml格式 enabled:属性的为enabled 13 Path string `yaml:"path"` 14} 15 16func (c *conf) getConf() *conf { 17 yamlFile, err := ioutil.ReadFile("conf.yaml") 18 if err != nil { 19 log.Printf("yamlFile.Get err #%v ", err) 20 } 21 22 err = yaml.Unmarshal(yamlFile, c) 23 if err != nil { 24 log.Fatalf("Unmarshal: %v", err) 25 } 26 return c 27} 28 29func main() { 30 var c conf 31 c.getConf() 32 fmt.Println("path:" + c.Path) 33}

  启动运行后,输出如下:

1D:\Go_Path\go\src\configmgr>go run config_yaml.go 2path:/usr/local

最后

以上,就把golang 读取配置文件的方法,都介绍完了。大家可以拿着代码运行起来看看。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang