<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
go-ini
的多個設定項通過分割區(section
)來劃分。有預設(空)分割區和命名的分割區,沒有給分割區命名就是預設分割區,預設分割區必須寫在任何一個命名分割區的上邊。每個設定項通過換行來區分。
go-ini/ini
是GitHub上的一個程式碼庫,和其他golang庫一樣,通過golang命令列下載即可,如果下載速度慢可嘗試切換代理:go env -w GOPROXY=https://goproxy.cn
下載命令:
go get github.com/go-ini/ini
ini檔案以分割區來劃分多塊設定,
預設分割區必須寫在任何一個命名分割區的上邊,多個設定項用換行符號分割。
ini.load(ini檔案路徑)
即可。返回一個組態檔結構體指標和錯誤資訊cfgs, err := ini.Load("./conf/go-conf.ini") if err != nil { fmt.Println(err) } // cfgs是組態檔的結構體指標
讀取命名分割區資料:
sp := cfgs.Section()
選擇一個分割區,返回分割區的結構體指標
Key()
是分割區結構體的一個方法,讀取分割區的設定項,返回一個鍵的結構體指標
val := cfgs.Section("kafka").Key("address").Value() fmt.Print(val) // 列印 : 127.0.0.1:9092
讀取預設分割區資料
預設分割區只需要鍵分割區明為空即可:val := cfgs.Section().key().Value()
val := cfgs.Section("").Key("a").Value() fmt.Print(val) // 列印: 122
關於讀取到的鍵結構體指標。可以鍵值轉為多種型別,包括單不限於go的基本資料型別,有兩個返回值
Value()
則直接不做換回直接返回,只有一個返回值
// 直接返回值 val := cfgs.Section("").Key("a").Value() fmt.Print(val) // 列印: 122 // 返回一個int型別的key值 val,err := cfgs.Section("").Key("a").Int() if err != nil { fmt.Print(err) } fmt.Print(val) // 列印: 122
定義與ini設定項匹配的結構體,通過ini.MapTo()
將設定對映到結構體中。
結構體中成員屬性必須加上tag
,ini
庫通過tap
對映對應的設定項,
type KafkaConfig struct { // ini用於給ini庫做標識 Address string `ini:"address"` } type TailConfig struct { Path string `ini:"path"` Filename string `ini:"fileName"` // 如果是結構體,則指明分割區名。其他指明設定項即可 Children `ini:"tailfile.children"` } type Children struct { Name string `ini:"name"` } type Config struct { KafkaConfig `ini:"kafka"` TailConfig `ini:"tailfile"` }
func main() { // 先範例化結構體,將指標傳入MapTo方法中 var cfg = new(Config) err := ini.MapTo(cfg, "./conf/go-conf.ini") if err != nil { fmt.Print(err) } // 取最深的設定項 fmt.Println(cfg.TailConfig.Children.Name) } // 執行結果: pp_mode
go-ini
有父子分割區,但是層級不是很分明。不管是在結構體中還是直接檔案操作,操作起來和平級一樣的。
您可以在分割區名稱中使用
.
來表示兩個或多個分割區之間的父子關係。如果某個鍵在子分割區中不存在,則會去它的父分割區中再次尋找,直到沒有父分割區為止。
就如上個例子中,對映cfg.TailConfig.Children
, tag上標明的是tailfile.children
,這和平級完全是一樣的,層級還是通過結構體體現出來的
package main import ( "fmt" "github.com/go-ini/ini" ) type KafkaConfig struct { Address string `ini:"address"` } type TailConfig struct { Path string `ini:"path"` Filename string `ini:"fileName"` // 如果是結構體,則指明分割區名 Children `ini:"tailfile.children"` } type Config struct { KafkaConfig `ini:"kafka"` TailConfig `ini:"tailfile"` } type Children struct { Name string `ini:"name"` } func main() { // var cfg = new(Config) // err := ini.MapTo(cfg, "./conf/go-conf.ini") // if err != nil { // fmt.Print(err) // } // fmt.Println(cfg.TailConfig.Children.Name) cfgs, err := ini.Load("./conf/go-conf.ini") if err != nil { fmt.Println(err) } // val,_ := cfgs.Section("").Key("a").Int() fmt.Print(val) }
a=122 [kafka] address = 127.0.0.1:9092 [tailfile] path = f:/runtime/tmp fileName = 4.log [tailfile.children] name = pp_mode
到此這篇關於Golang使用ini庫讀取設定詳情的文章就介紹到這了,更多相關Golang 使用ini庫讀取設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45