使用viper管理配置文件

项目初期配置都是写死的,为了方便后期上容器,需要实现灵活的配置。以mysql的访问为例:

以前是这样子的

db, err = gorm.Open(“mysql”, "root:@/test?charset=utf8&parseTime=True&loc=Local")

这种代码仅适合测试环境中使用,上不得生产环境。因此调研了go语言中开源的配置实现。最终选定viper,很简单。

首先,在项目根目录下建立config目录,创建config.go文件,内容如下:

package config

import (

"github.com/spf13/viper"

)

func LoadConfigFromYaml() (*viper.Viper, error) {

var v *viper.Viper

v = viper.New()

v.SetConfigName("config.yaml")

v.AddConfigPath("./config/")

v.SetConfigType("yaml")

if err := v.ReadInConfig(); err != nil {

return nil, err

}

return v, nil

}

在config目录下建立config.yaml文件,写入mysql相关的信息:

# cat config/config.yaml

db:

    type: "mysql"

    user: "root"

    password: ""

    host: "127.0.0.1"

    database: "test"

然后在open mysql数据库时,通过viper获取各个string

v, err0 := config.LoadConfigFromYaml()

        if err0 != nil {

            log.Fatalf("Init DB error: %v", err0)

        }

        dbtype := v.GetString("db.type")

        dbuser := v.Get("db.user")

        dbpasswd := v.Get("db.password")

        dbhost := v.Get("db.host")

        dbname := v.Get("db.database")

        db, err = gorm.Open(dbtype, fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=True&loc=Local",

                  dbuser,

                  dbpasswd,

                  dbhost,

                  dbname))


OK,是不是比原来好多了~

你可能感兴趣的:(使用viper管理配置文件)