首页 > 代码库 > golang下使用ini配置文件(widuu/goini)

golang下使用ini配置文件(widuu/goini)

在“widuu/goini”基础上进行了修改,增加了其他数据类型配置值(string、int、int32、int64、[]int、[]string)的支持。

 

使用方法:

ConfigCentor := goini.SetConfig("./config.ini")
读取int配置值:ConfigCentor.GetValueInt("ES","LogLevel")
读取string配置值:ConfigCentor.GetValue("ES","Url")
读取int数组配置值(","为分隔符):ConfigCentor.GetValueArray("ES","Url")


 

源码lib包(包名:goini,在go的src下创建目录goini,创建conf.go文件放在此目录即可):

package goiniimport (    "bufio"    "fmt"    "io"    "os"    "strings"    "strconv")type Config struct {    filepath string                             conflist []map[string]map[string]string }//Create empty filefunc SetConfig(filepath string) *Config {    c := new(Config)    c.filepath = filepath    return c}//key values:stringfunc (c *Config) GetValue(section, name string) string {    c.ReadList()    conf := c.ReadList()    for _, v := range conf {        for key, value := range v {            if key == section {                return value[name]            }        }    }    return ""}//key values:intfunc (c *Config) GetValueInt(section, name string) int {    c.ReadList()    conf := c.ReadList()    for _, v := range conf {        for key, value := range v {            if key == section {                val,_ := strconv.Atoi(value[name])                return val            }        }    }    return 0}//key values:intfunc (c *Config) GetValueInt32(section, name string) int32 {    c.ReadList()    conf := c.ReadList()    for _, v := range conf {        for key, value := range v {            if key == section {                val,_:=strconv.ParseInt(value[name],10,32)                return int32(val)            }        }    }    return 0}//key values:intfunc (c *Config) GetValueInt64(section, name string) int64 {    c.ReadList()    conf := c.ReadList()    for _, v := range conf {        for key, value := range v {            if key == section {                val,_:=strconv.ParseInt(value[name],10,64)                return val            }        }    }    return 0}//key values:[]int,split by ","func (c *Config) GetValueArray(section, name string) []string {    c.ReadList()    conf := c.ReadList()    for _, v := range conf {        for key, value := range v {            if key == section {                arr := strings.Split(value[name], ",")                return arr            }        }    }    return nil}//key values:[]int,split by ","func (c *Config) GetValueIntArray(section, name string) []int {    c.ReadList()    conf := c.ReadList()    for _, v := range conf {        for key, value := range v {            if key == section {                arr := strings.Split(value[name], ",")                arrValue := []int{}                 for _, str := range arr {                     val,_:=strconv.Atoi(str)                     arrValue=append(arrValue,val)                 }                return arrValue            }        }    }    return nil}//Set the corresponding value of the key value, if not add, if there is a key changefunc (c *Config) SetValue(section, key, value string) bool {    c.ReadList()    data := c.conflist    var ok bool    var index = make(map[int]bool)    var conf = make(map[string]map[string]string)    for i, v := range data {        _, ok = v[section]        index[i] = ok    }    i, ok := func(m map[int]bool) (i int, v bool) {        for i, v := range m {            if v == true {                return i, true            }        }        return 0, false    }(index)    if ok {        c.conflist[i][section][key] = value        return true    } else {        conf[section] = make(map[string]string)        conf[section][key] = value        c.conflist = append(c.conflist, conf)        return true    }    return false}//Delete the corresponding key valuesfunc (c *Config) DeleteValue(section, name string) bool {    c.ReadList()    data := c.conflist    for i, v := range data {        for key, _ := range v {            if key == section {                delete(c.conflist[i][key], name)                return true            }        }    }    return false}//List all the configuration filefunc (c *Config) ReadList() []map[string]map[string]string {    file, err := os.Open(c.filepath)    if err != nil {        CheckErr(err)    }    defer file.Close()    var data map[string]map[string]string    var section string    buf := bufio.NewReader(file)    for {        l, err := buf.ReadString(‘\n‘)        line := strings.TrimSpace(l)        if err != nil {            if err != io.EOF {                CheckErr(err)            }            if len(line) == 0 {                break            }        }        switch {        case len(line) == 0:        case line[0] == ‘[‘ && line[len(line)-1] == ‘]‘:            section = strings.TrimSpace(line[1 : len(line)-1])            data = make(map[string]map[string]string)            data[section] = make(map[string]string)        default:            i := strings.IndexAny(line, "=")            value := strings.TrimSpace(line[i+1 : len(line)])            data[section][strings.TrimSpace(line[0:i])] = value            if c.uniquappend(section) == true {                c.conflist = append(c.conflist, data)            }        }    }    return c.conflist}func CheckErr(err error) string {    if err != nil {        return fmt.Sprintf("Error is :‘%s‘", err.Error())    }    return "Notfound this error"}//Ban repeated appended to the slice methodfunc (c *Config) uniquappend(conf string) bool {    for _, v := range c.conflist {        for k, _ := range v {            if k == conf {                return false            }        }    }    return true}

 

golang下使用ini配置文件(widuu/goini)