golang開發:類庫篇(四)配置文件解析器goconfig的使用

爲什麼要使用goconfig解析配置文件

目前各語言框架對配置文件書寫基本都差不多,基本都是首先配置一些基礎變量,基本變量裏面有環境的配置,然後通過環境變量去獲取該環境下的變量。例如,生產環境跟測試環境使用同一份配置,但是相應的環境下的變量的值是不一樣的,通過環境獲其取對應的的key value。沒明白沒關係,舉例子的時候就明白了。

PHP的框架yaf。golang的框架beego。對配置的書寫和解析基本都是一致的。

看下goconfig的解釋

goconfig 是一個易於使用,支持註釋的 Go 語言配置文件解析器,該文件的書寫格式和 Windows 下的 INI 文件一樣。
配置文件由形爲 [section] 的節構成,內部使用 name:value 或 name=value 這樣的鍵值對;每行開頭和尾部的空白符號都將被忽略;如果未指定任何節,則會默認放入名爲 DEFAULT 的節當中;可以使用 “;” 或 “#” 來作爲註釋的開頭,並可以放置於任意的單獨一行中。

舉個栗子一目瞭然

怎麼使用 goconfig

先寫一個常用的配置

;redis cache
USER_LIST = USER:LIST
MAX_COUNT = 50
MAX_PRICE = 123456
IS_SHOW = true

[test]
dbdns = root:@tcp(127.0.0.1:3306)

[prod]
dbdns = root:@tcp(172.168.1.1:3306)

然後我們讀取這個配置

package main

import (
	"log"
	"github.com/Unknwon/goconfig"
	"fmt"
)

func main() {
	cfg, err := goconfig.LoadConfigFile("./conf.ini")
	if err != nil {
		log.Fatalf("無法加載配置文件:%s", err)
	}
	userListKey, err := cfg.GetValue("","USER_LIST")
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(userListKey)
	userListKey2,_ := cfg.GetValue(goconfig.DEFAULT_SECTION, "USER_LIST")
	fmt.Println(userListKey2)
	maxCount := cfg.MustInt("","MAX_COUNT")
	fmt.Println(maxCount)
	maxPrice := cfg.MustFloat64("","MAX_PRICE")
	fmt.Println(maxPrice)
	isShow := cfg.MustBool("","IS_SHOW")
	fmt.Println(isShow)

	db := cfg.MustValue("test","dbdns")
	fmt.Println(db)

	dbProd := cfg.MustValue("prod","dbdns")
	fmt.Println(dbProd)

	//set 值
	cfg.SetValue("","MAX_NEW","10")
	maxNew := cfg.MustInt("","MAX_NEW")
	fmt.Println(maxNew)

	maxNew1,err := cfg.Int("","MAX_NEW")
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(maxNew1)
}

cfg.DeleteKey("", "MAX_NEW")

執行下結果

go build -o test.bin
 ./test.bin
USER:LIST
USER:LIST
50
123456
true
root:@tcp(127.0.0.1:3306)
root:@tcp(172.168.1.1:3306)
10
10

跟預想的結果一致。

文檔上把用法講的很清楚
函數 LoadConfigFile 加載一個或多個文件,然後返回一個類型爲 ConfigFile 的變量。
GetValue 可以簡單的獲取某個值。
像 Bool、Int、Int64 這樣的方法會直接返回指定類型的值。
以 Must 開頭的方法不會返回錯誤,但當錯誤發生時會返回零值。
SetValue 可以設置某個值。
DeleteKey 可以刪除某個鍵。
最後,SaveConfigFile 可以保持您的配置到本地文件系統。
使用方法 Reload 可以重載您的配置文件。

幾個注意的地方
1.配置符號可以使用=,也可以使用 :
2.section的部分可以設置一個系統常量,測試環境的值是test,生產環境的值是prod,就不用調用的時候區別環境變量。
cfg.MustValue(ENV,“dbdns”)

如果需要了解更詳細的使用,看下文檔
https://github.com/Unknwon/goconfig

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章