本篇内容介绍了“Golang使用ini库读取配置的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
go-ini的分区
go-inisection
go-ini的安装
go-ini/inigo env -w GOPROXY=https://goproxy.cn
下载命令:
go get github.com/go-ini/ini
ini文件的格式
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
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.MapTo()
taginitap
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.Childrentailfile.children
两份关键代码
main.go
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) }
go-conf.ini
a=122 [kafka] address = 127.0.0.1:9092 [tailfile] path = f:/runtime/tmp fileName = 4.log [tailfile.children] name = pp_mode