描述

使用goini更简单的读取go的ini配置文件以及根据特定格式的各种配置文件。
安装方法

go get github.com/widuu/goini

使用方法
ini配置文件格式样列

[database]
username = root
password = password
hostname = localhost

[admin]
username = root
password = password

[nihao]
username = root
password = password

初始化

conf := goini.SetConfig("./conf/conf.ini") //goini.SetConfig(filepath) 其中filepath是你ini 配置文件的所在位置

获取单个配置信息

username := conf.GetValue("database", "username") //database是你的[section],username是你要获取值的key名称
fmt.Println(username) //root

删除一个配置信息

conf.DeleteValue("database", "username")    //username 是你删除的key
username = conf.GetValue("database", "username")
if len(username) == 0 {
    fmt.Println("username is not exists") //this stdout username is not exists
}

添加一个配置信息

conf.SetValue("database", "username", "widuu")
username = conf.GetValue("database", "username")
fmt.Println(username) //widuu 添加配置信息如果存在[section]则添加或者修改对应的值,如果不存在则添加section

获取所有配置信息

conf.ReadList() //返回[]map[string]map[string]string的格式 即setion=>key->value

// 获取默认分区的key

fmt.Println(cfg.Section("").Key("version").String())    // 将结果转为string
fmt.Println(cfg.Section("").Key("width").Float64())     // 将结果转为float

// 获取mysql分区的key

fmt.Println(cfg.Section("mysql").Key("host").String())  // 将结果转为string
fmt.Println(cfg.Section("mysql").Key("port").Int())     // 将结果转为int

简单封装下

package main

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

func main() {
    cfg, err := ini.Load("config.ini")
    getErr("load config", err)

    // 遍历所有的section
    for _, v := range cfg.Sections(){
        fmt.Println(v.KeyStrings())
    }

    // 获取默认分区的key
    fmt.Println(cfg.Section("").Key("version").String())    // 将结果转为string
    fmt.Println(cfg.Section("").Key("width").Float64())     // 将结果转为float

    // 获取mysql分区的key
    fmt.Println(cfg.Section("mysql").Key("host").String())  // 将结果转为string
    fmt.Println(cfg.Section("mysql").Key("port").Int())     // 将结果转为int

    // 如果读取的值不在候选列表内,则会回退使用提供的默认值
    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("config.ini")
}

func getErr(msg string, err error){
    if err != nil{
        log.Printf("%v err->%v\n", msg, err)
    }
}

config.ini

```go
version = 2.0.0
width   = 75.3

[mysql]
host     = 127.0.0.1
port     = 8080
username = root
password = 111111
database = test


测试代码

```go
// config_read_test project main.go
package main

import (
    "fmt"
    "utils/ini"
)

func main() {
    fmt.Println("config read test!")

    ini_parser := utils.IniParser{}

    conf_file_name := "conf.ini"
    if err := ini_parser.Load("conf.ini"); err != nil {
        fmt.Printf("try load config file[%s] error[%s]\n", conf_file_name, err.Error())
        return
    }

    ip := ini_parser.GetString("", "test.ip")
    port := ini_parser.GetInt64("", "port")
    user_name := ini_parser.GetString("", "user_name")
    item_1 := ini_parser.GetInt64("", "item1")
    item_2 := ini_parser.GetInt64("", "item2")

    fmt.Printf("ip: %s, port: %d, user_name :%s, item1: %d, item2: %d\n", ip, port, user_name, item_1, item_2)

    ip = ini_parser.GetString("test", "ip")
    port = ini_parser.GetInt64("test", "port")
    user_name = ini_parser.GetString("test", "user_name")

    fmt.Printf("ip: %s, port: %d, user_name :%s\n", ip, port, user_name)
}

运行结果

config read test!
ip: , port: 0, user_name :, item1: 0, item2: 3333
ip: 127.0.0.1, port: 2202, user_name :test1
文档更新时间: 2020-06-25 14:00   作者:月影鹏鹏