首页 > 代码库 > 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。