GO系列 ini檔案處理

2022-07-25 21:21:12 字數 3678 閱讀 7886

gopkg.in/ini.v1

建立乙個空的配置

cfg := ini.empty()
直接載入存在的配置檔案,如果檔案不存在就會報錯

可以同時載入多個配置檔案,後面的配置檔案鍵值會覆蓋前面乙個

不能夠確定其中哪些檔案是不存在的,可以通過呼叫函式 looseload() 來忽略它們。

跳過無法識別的資料行

cfg, err := ini.loadsources(ini.loadoptions, "other.ini")
比較原始的做法是輸出配置到某個檔案:

儲存時調整縮排

獲取制定分割槽的物件

sec, err := cfg.getsection("db")
如果想要獲取預設分割槽,則可以用空字串代替分割槽名:

sec, err := cfg.getsection("")
相對應的,還可以使用 ini.default_section 來獲取預設分割槽:

sec, err := cfg.getsection(ini.default_section)
當您非常確定某個分割槽是存在的,可以使用以下簡便方法:

sec := cfg.section("section name")
如果不存再,會自動建立並返回乙個對應的分割槽物件。

建立乙個分割槽:

err := cfg.newsection("new section")
獲取所有分割槽物件或名稱:

secs := cfg.sections()

names := cfg.sectionstrings()

key, err := cfg.section("").getkey("key name")
和分割槽一樣,您也可以直接獲取鍵而忽略錯誤處理:

key := cfg.section("").key("key name")
判斷某個鍵是否存在:

yes := cfg.section("").haskey("key name")
建立乙個新的鍵:

err := cfg.section("").newkey("name", "value")
獲取分割槽下的所有鍵或鍵名:

keys := cfg.section("").keys()

names := cfg.section("").keystrings()

獲取分割槽下的所有鍵值對的轉殖:

hash := cfg.section("").keyshash()
獲取乙個型別為字串(string)的值:

val := cfg.section("").key("key name").string()
獲取值的同時通過自定義函式進行處理驗證:

val := cfg.section("").key("key name").validate(func(in string) string 

return in

})

如果不需要任何對值的自動轉變功能(例如遞迴讀取),可以直接獲取原值(這種方式效能最佳):

val := cfg.section("").key("key name").value()
判斷某個原值是否存在:

yes := cfg.section("").hasvalue("test value")
獲取其它型別的值:

// 布林值的規則:

// true 當值為:1, t, t, true, true, true, yes, yes, yes, y, on, on, on

// false 當值為:0, f, f, false, false, false, no, no, no, n, off, off, off

v, err = cfg.section("").key("bool").bool()

v, err = cfg.section("").key("float64").float64()

v, err = cfg.section("").key("int").int()

v, err = cfg.section("").key("int64").int64()

v, err = cfg.section("").key("uint").uint()

v, err = cfg.section("").key("uint64").uint64()

v, err = cfg.section("").key("time").timeformat(time.rfc3339)

v, err = cfg.section("").key("time").time() // rfc3339

v = cfg.section("").key("bool").mustbool()

v = cfg.section("").key("float64").mustfloat64()

v = cfg.section("").key("int").mustint()

v = cfg.section("").key("int64").mustint64()

v = cfg.section("").key("uint").mustuint()

v = cfg.section("").key("uint64").mustuint64()

v = cfg.section("").key("time").musttimeformat(time.rfc3339)

v = cfg.section("").key("time").musttime() // rfc3339

// 由 must 開頭的方法名允許接收乙個相同型別的引數來作為預設值,

// 當鍵不存在或者轉換失敗時,則會直接返回該預設值。

// 但是,muststring 方法必須傳遞乙個預設值。

v = cfg.section("").key("string").muststring("default")

v = cfg.section("").key("bool").mustbool(true)

v = cfg.section("").key("float64").mustfloat64(1.25)

v = cfg.section("").key("int").mustint(10)

v = cfg.section("").key("int64").mustint64(99)

v = cfg.section("").key("uint").mustuint(3)

v = cfg.section("").key("uint64").mustuint64(6)

v = cfg.section("").key("time").musttimeformat(time.rfc3339, time.now())

v = cfg.section("").key("time").musttime(time.now()) // rfc3339

下述幾種情況的內容將被視為注釋:

所有以 # 或 ; 開頭的行

所有在 # 或 ; 之後的內容

分割槽標籤後的文字 (即 [分割槽名] 之後的內容)

如果你希望使用包含 # 或 ; 的值,請使用 ` 或 """ 進行包覆。

除此之外,還可以通過 loadoptions 完全忽略行內注釋:

或要求注釋符號前必須帶有乙個空格:

ini檔案處理

import configparser cfg configparser.configparser read ok cfg.read e test mysql.ini 操作之前必須先 read到記憶體中 print read ok print cfg.sections print cfg.defau...

常見檔案處理之INI檔案

ini檔案的結構如下 小節名 關鍵字 值 usesinifiles 常用的方法 writestring 寫入字串 writeinteger 寫入數字 writebool 寫入布林值 readstring 讀取字串值 readinteger 讀取數字 readbool 讀取布林值 readsectio...

ini配置檔案解析 Go語言

ini配置檔案解析器 mysqlconfig mysql配置結構體type mysqlconfig struct redisconfig redis配置結構體type redisconfig struct configtype config struct func loadini filename ...