先创建一个ini结尾的文件,然后在文件中加入一些内容,也可以自己定义。
app_name = wulaoer.org # possible values: DEBUG, INFO, WARNING, ERROR, FATAL log_level = DEBUG [mysql] ip = 127.0.0.1 port = 3306 user = wulaoer password = 123456 database = wulaoer
操作ini文件需要用到ini模块,所以在操作之前我们需要安装一下ini模块。
go get -u github.com/go-ini/ini
安装ini模块后,在读取文件时,对于文件中[mysql]理解为分区数,mysql下的例如:ip = 127.0.0.1,ip称之为key,127.0.0.1称之为值,也就是key和value的关系。看下面的操作注释。
package main import ( "fmt" "github.com/go-ini/ini" "log" ) //个人技术博客 http://www.wulaoer.org func main() { cfg, err := ini.Load("learn/go-ini/app.ini") if err != nil { fmt.Println("open file faild") } fmt.Println("APPBNME:", cfg.Section("").Key("app_name").String()) //Section中是分区,""是默认分区,后面的Key是分区中的key值,最后将结果转为String fmt.Println("MYSQLIP:", cfg.Section("mysql").Key("ip").String()) //获取mysql分区的ip的值 fmt.Println("MYSQLPORT:", cfg.Section("mysql").Key("port").Value()) //返回Int类型的key值必须判断一下, mysqlpass, err := cfg.Section("mysql").Key("password").Int() if err != nil { log.Fatal(err) } fmt.Println("MYSQLPASS:", mysqlpass) // 如果读取的值不在候选列表内,则会回退使用提供的默认值 fmt.Println("Server Protocol:", cfg.Section("mysql").Key("port").In("80", []string{"5555", "8080"})) // 自动类型转换 fmt.Printf("Port Number: (%[1]T) %[1]d\n", cfg.Section("mysql").Key("port").MustInt(9999)) fmt.Printf("Database Name: (%[1]T) %[1]s\n", cfg.Section("mysql").Key("database").MustString("test")) // 修改某个值然后进行保存 cfg.Section("").Key("version").SetValue("2.0.0") cfg.SaveTo("learn/go-ini/app.ini") for _, v := range cfg.Sections() { fmt.Println(v.KeyStrings()) } } 返回结果: APPBNME: wulaoer.org MYSQLIP: 127.0.0.1 MYSQLPORT: 3306 MYSQLPASS: 123456 Server Protocol: 80 Port Number: (int) 3306 Database Name: (string) wulaoer [app_name log_level] [ip port user password database]
使用viper模块读取ini文件内容
[wolf@wulaoer.org 🔥🔥🔥🔥 go-ini ]$ go get github.com/spf13/viper #导入模块 package main import ( "fmt" "github.com/spf13/viper" ) //个人技术博客 http://www.wulaoer.org func main() { config := viper.New() config.AddConfigPath("learn/go-ini/") // 文件所在目录 config.SetConfigName("app") // 文件名 config.SetConfigType("ini") // 文件类型 if err := config.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { fmt.Println("找不到配置文件..") } else { fmt.Println("配置文件出错..") } } host := config.GetString("mysql.ip") // 读取配置 port := config.GetInt("mysql.port") //读取端口 appname := config.GetString("default.app_name") //默认分区 fmt.Println("viper load ini: ", host, port, appname) //循环解析文件 for i := range config.AllKeys() { fmt.Println(config.AllKeys()[i]) fmt.Println(config.Get(config.AllKeys()[i])) } //把上面的配置文件下写入到指定文件 config.WriteConfig() // 将当前配置写入“viper.AddConfigPath()”和“viper.SetConfigName”设置的预定义路径 config.SafeWriteConfig() config.WriteConfigAs("learn/go-ini/") config.SafeWriteConfigAs("learn/go-ini/.config") // 因为该配置文件写入过,所以会报错 config.SafeWriteConfigAs("learn/go-ini/.other_config") }
以上就是针对ini后缀文件使用go读取配置文件的方法,在使用go-ini和viper之间如何选择还是根据个人喜好即可,viper也可以用在json后缀,yaml后缀文件的读取以及配置等方式,这里就不多介绍了,后期慢慢更新即可。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏