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

實際項目中,讀取相關的系統配置文件是很常見的事情。今天就來講一說,Golang 是如何讀取YAML,JSON,INI等配置文件的。git

 

1. json使用

JSON 應該比較熟悉,它是一種輕量級的數據交換格式。層次結構簡潔清晰 ,易於閱讀和編寫,同時也易於機器解析和生成。github

  1. 建立 conf.json:golang

{
"enabled": true,
"path": "/usr/local"
}

 

  2. 新建config_json.go:json

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

type configuration struct {
    Enabled bool
    Path    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。spa

  1. 建立 conf.ini:操作系統

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

  2.下載第三方庫:go get gopkg.in/gcfg.v1code

  3. 新建 config_ini.go:對象

package main

import (
    "fmt"
    gcfg "gopkg.in/gcfg.v1"
)

func main() {
    config := struct {
        Section struct {
            Enabled bool
            Path    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)
}

 

  啓動運行後,輸出以下:blog

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 main

import (
    "fmt"
    "io/ioutil"
    "log"

    "gopkg.in/yaml.v2"
)

type conf struct {
    Enabled bool   `yaml:"enabled"` //yaml:yaml格式 enabled:屬性的爲enabled
    Path    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 conf
    c.getConf()
    fmt.Println("path:" + c.Path)
}

 

  啓動運行後,輸出以下:

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

 

最後

以上,就把golang 讀取配置文件的方法,都介紹完了。你們能夠拿着代碼運行起來看看。

相關文章
相關標籤/搜索