go ini库之go-ini

Posted zzxiaoma

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go ini库之go-ini相关的知识,希望对你有一定的参考价值。

一、安装go get gopkg.in/ini.v1

二、使用

doc.ini

mode = development

[mysql]

default-character-set=utf8

[server]

ip = 127.0.0.1

port = abc

获取内容如下

package main

import (
"fmt"
"os"
"gopkg.in/ini.v1"
)

func main()
cfg, err := ini.Load("doc.ini")
if err != nil
fmt.Printf("Fail to read file: %v", err)
os.Exit(1)

fmt.Println(cfg.Section("").Key("mode").Value())
fmt.Println("Mode:", cfg.Section("").Key("mode").String())
fmt.Println("mysql:", cfg.Section("mysql").Key("default-character-set").String())
fmt.Println(cfg.Section("server").Key("port").MustInt(8888))
fmt.Println(
cfg.Section("server").Key("ip").In("192.168.0.1", []string"localhost", "192.168.0.1"))

通过Load方法加载ini文件,通过cfg.Section("")获取默认分区,也就是没有显式标明的中括号下面的数据,接着Key方法就可以获取到对应的值,再通过String()方法转成字符串。

通过.MustInt(8888)方法表明如果获取到的值不是int,就是用8888来代替。使用In可以提供候选值,如果上面的string切片,只能是localhost或192.168.0.1,ip信息不是这2项,就是把ip的值当做192.168.0.1。

在加载多个数据源时,如果某一个键在一个或多个数据源中出现,则会出现数据覆写。也就是加载多个文件时,文件中的分区和键不要同时一样。

ini.Load("doc.ini", "doc1.ini")

如果ini文件中不是所有的内容都是键值对,也就是只有键没有值,如果想忽略这些内容使用

cfg, err := ini.LoadSources(ini.LoadOptions
SkipUnrecognizableLines: true,
, "other.ini")

修改保存文件使用

cfg.Section("").Key("mode").SetValue("production")
err = cfg.SaveTo("doc.ini")

忽略键名大小写

cfg, err := ini.InsensitiveLoad("doc.ini")

判断值是否存在

yes := cfg.Section("").HasValue("test value")


以上是关于go ini库之go-ini的主要内容,如果未能解决你的问题,请参考以下文章

使用Go Modules引入本地包

使用Go Modules引入本地包

使用Go Modules引入本地包

Go 每日一库之 fsnotify

Go 每日一库之 reflect

Go 每日一库之 bytebufferpool