Golang-配置读取viper

在自己写的组件里面,通常会遇到一些需要读取配置文件的情况。在使用beego时,是使用自带的方法获取./conf/app.conf文件中的内容,但在一个非beego框架的组件里并不想引入beego,于是乎学习了另外一个专门用来读取配置的包:“viper”。

功能特征

  • 设置默认值

  • 从JSON,toml YAML,HCl,和java属性配置文件

  • 从环境变量env读取值

  • 读缓冲区

  • 远程读取配置文件

  • key不区分大小写

初始化

func init() {
//读取conf.toml配置信息
flag.IntVar(&Port, "p", 5000, "监听的端口")
flag.StringVar(&ConfigPath, "c", "./conf/conf.toml", "配置文件的地址")
flag.Parse()
filenameWithSuffix := path.Base(ConfigPath)
filePath := path.Dir(ConfigPath)
fileSuffix := path.Ext(filenameWithSuffix)
var filenameOnly string
filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)

viper.SetConfigType("toml")
viper.SetConfigName(filenameOnly) //不带后缀的文件名
viper.AddConfigPath(filePath)
err := viper.ReadInConfig()
if err != nil {
plog.VFatal("Fatal error config file: %v", err)
}
}

存取配置

viper包下有很多的Get开头的方法,对应着不同类型数据的获取,常用的如GetInt(),GetString(),GetIntSlice(),GetStringSlice()等等,都非常好理解,同样的取数据就是Set开头

  • phalgo.Config.Get(key string) : interface{}

  • phalgo.Config.GetBool(key string) : bool

  • phalgo.Config.GetFloat64(key string) : float64

  • phalgo.Config.GetInt(key string) : int

  • phalgo.Config.GetString(key string) : string

  • phalgo.Config.GetStringMap(key string) : map[string]interface{}

  • phalgo.Config.GetStringMapString(key string) : map[string]string

  • phalgo.Config.GetStringSlice(key string) : []string

  • phalgo.Config.GetTime(key string) : time.Time

  • phalgo.Config.GetDuration(key string) : time.Duration

  • phalgo.Config.IsSet(key string) : bool

[ljy__user]
key_type = 1
sharding = "test"
ttl = 2592000
order = ["id", "name", "age", "sex"]
[ljy__user.key]
item = ["id"]
item_type = ["int32"]
[ljy__user.field]
item = ["id"]
item_type = ["int32"]
[ljy__user.value]
item = ["name", "age", "sex"]
item_type = ["string", "int64", "string"]

对于上面的配置例子就包含了int,string,[]string的类型,同时也有子元素的存取,就像结构体一样。

SubTableField := viper.GetString("ljy__user.sharding")
SubTableMod := viper.GetInt("ljy__user.key_type")
Item := viper.GetStringSlice("ljy__user.key.item")

END