设为首页 加入收藏

TOP

golang下使用ini配置文件(widuu/goini)(一)
2017-09-30 13:52:02 】 浏览:6035
Tags: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 goini

import (
    "bufio"
    "fmt"
    "io"
    "os"
    "strings"
    "strconv"
)

type Config struct {
    filepath string                         
    conflist []map[string]map[string]string 
}

//Create empty file
func SetConfig(filepath string) *Config {
    c := new(Config)
    c.filepath = filepath

    return c
}

//key values:string
func (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:int
func (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:int
func (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:int
func (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 change
func (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 values
func (c *Config) Deleteva lue(section, name string) bool {
    c.ReadList()
    data := c.conflist
    for i, v := range data {
        for key, _ := range v {
            if key == section {
                delete(c
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇golang爬坑:操作Linux命令 下一篇Go Walk教程 - 流程控制( switc..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目