Go語(yǔ)言中加載配置文件之goconfig框架使用

每個(gè)項(xiàng)目中都會(huì)有配置文件管理來(lái)管理,比如數(shù)據(jù)庫(kù)的配置淹遵。

配置文件框架 一般大致思路都是加載配置文件咽安,返回配置操作對(duì)象,該對(duì)象提供獲取配置api

下面我們來(lái)使用goconfig框架來(lái)了解配置框架,它解析的是ini文件,ini文件以簡(jiǎn)單的文字和結(jié)構(gòu)組成烫幕,一般windows系統(tǒng)比較常見(jiàn)俺抽,很多應(yīng)用程序也會(huì)因?yàn)槠浜?jiǎn)單而使用其作為配置文件

官網(wǎng)star目前599

img_2.png

安裝

go get github.com/Unknwon/goconfig

配置示例

在項(xiàng)目下建立一個(gè)文件 conf/conf_goconfig.ini 內(nèi)容如下

[mysql]
host = 127.0.0.1
port = 3306
; 用戶名
user = root
# 密碼
password = root
db_name : blog
max_idle : 2
max_conn : 10
[array]
course = java,go,python

配置文件由一個(gè)個(gè)的 section 組成,section 下就是key = value或者key : value 這樣的格式配置

如果沒(méi)有 section 會(huì)放到 DEFAULT 默認(rèn)section里面

注釋使用 ;開(kāi)頭或者#開(kāi)頭

下面我們就來(lái)讀取配置
加載较曼、獲取section磷斧、獲取單個(gè)值、獲取注釋诗芜、獲取數(shù)組瞳抓、重新設(shè)置值、刪除值伏恐,重新加載文件(會(huì)寫(xiě)一個(gè)for循環(huán)10次去重新加載配置孩哑,這期間修改配置,觀察值是否改變)

編寫(xiě)go代碼

package main

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

func main() {

    currentPath, _ := os.Getwd()
    confPath := currentPath + "/conf/conf_goconfig.ini"

    _, err := os.Stat(confPath)
    if err != nil {
        panic(errors.New(fmt.Sprintf("file is not found %s", confPath)))

    }

    // 加載配置
    config, err := goconfig.LoadConfigFile(confPath)
    if err != nil {
        log.Fatal("讀取配置文件出錯(cuò):", err)
    }

    // 獲取 section
    mysqlConf, _ := config.GetSection("mysql")
    fmt.Println(mysqlConf)
    fmt.Println(mysqlConf["host"])

    // 獲取單個(gè)值
    user, _ := config.GetValue("mysql", "user")
    fmt.Println(user)

    // 獲取單個(gè)值并且指定類型
    maxIdle, _ := config.Int("mysql", "max_idle")
    fmt.Println(maxIdle)

    // 獲取單個(gè)值翠桦,發(fā)生錯(cuò)誤時(shí)返回默認(rèn)值横蜒,沒(méi)有默認(rèn)值返回零值
    port := config.MustInt("mysql", "port", 3308)
    fmt.Println(port)

    // 重新設(shè)置值
    config.SetValue("mysql", "port", "3307")
    port = config.MustInt("mysql", "port", 3308)
    fmt.Println(port)

    // 刪除值
    config.DeleteKey("mysql", "port")
    port = config.MustInt("mysql", "port", 3308)
    fmt.Println(port)

    // 獲取注釋
    comments := config.GetKeyComments("mysql", "user")
    fmt.Println(comments)

    // 獲取數(shù)組,需要指定分隔符
    array := config.MustValueArray("array", "course", ",")
    fmt.Println(array)

    // 重新加載配置文件销凑,一般對(duì)于web項(xiàng)目丛晌,改了配置文件希望能夠即使生效而不需要重啟應(yīng)用,可以對(duì)外提供刷新配置api
    // 修改password 為 root123值觀察值的變化
    for i := 0; i < 10; i++ {
        time.Sleep(time.Second * 3)
        _ = config.Reload()
        password, _ := config.GetValue("mysql", "password")
        fmt.Println(password)
    }
}

執(zhí)行

map[db_name:blog host:127.0.0.1 max_conn:10 max_idle:2 password:root port:3306 user:root]
127.0.0.1
root
2
3306
3307
3308
; 用戶名
[java go python]
root
root
root
root123
root123
root123
root123
root123
root123
root123

Process finished with the exit code 0

從結(jié)果中可以看出斗幼,正確獲取到了配置文件信息澎蛛,并且可以通過(guò) Reload重新加載配置,達(dá)到熱更新效果蜕窿!


goconfig的使用就介紹到這里谋逻,大家趕緊用起來(lái)把!

歡迎關(guān)注,學(xué)習(xí)不迷路桐经!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毁兆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阴挣,更是在濱河造成了極大的恐慌气堕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畔咧,死亡現(xiàn)場(chǎng)離奇詭異茎芭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盒卸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)骗爆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蔽介,你說(shuō)我怎么就攤上這事摘投≈蠊眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵犀呼,是天一觀的道長(zhǎng)幸撕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)外臂,這世上最難降的妖魔是什么坐儿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮宋光,結(jié)果婚禮上貌矿,老公的妹妹穿的比我還像新娘。我一直安慰自己罪佳,他們只是感情好逛漫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赘艳,像睡著了一般酌毡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕾管,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天枷踏,我揣著相機(jī)與錄音,去河邊找鬼掰曾。 笑死旭蠕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旷坦。 我是一名探鬼主播下梢,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼塞蹭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起讶坯,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤番电,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后辆琅,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體漱办,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年婉烟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娩井。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哎垦。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡葫隙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出码俩,到底是詐尸還是另有隱情,我是刑警寧澤扬霜,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布定鸟,位于F島的核電站,受9級(jí)特大地震影響著瓶,放射性物質(zhì)發(fā)生泄漏联予。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一材原、第九天 我趴在偏房一處隱蔽的房頂上張望沸久。 院中可真熱鬧,春花似錦余蟹、人聲如沸卷胯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诵竭。三九已至,卻和暖如春兼搏,著一層夾襖步出監(jiān)牢的瞬間卵慰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工佛呻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裳朋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓吓著,卻偏偏與公主長(zhǎng)得像鲤嫡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绑莺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容