使用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,是不是比原来好多了~

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ``` /* * @Descripttion: golang 连接mysql demo * @version: *...
    weilin_jin阅读 321评论 0 0
  • 一、数据类型转换 https://studygolang.com/articles/10838 package m...
    蓓蓓的万能男友阅读 1,110评论 0 1
  • 技术是基础,投资是刚需,应用是未来 以下文章仅是从个人角度对Ulord进行解读,对Ulord的价值阐述仅是冰山一角...
    梦之鸭阅读 415评论 0 1
  • 琥珀色的眼睛 缓缓闭上 黑曜般的皮毛 失去光芒 流浪世间已久 心灰意冷 一个白衣血袍的谕者 偶然的路过 无心的施舍...
    封子末阅读 142评论 0 1
  • 一周回顾: 上周学的东西比较多,但是感觉有点消化不良。目标很明确,任务也完成了。中间有点小插曲,就是我原本定的是熟...
    FKTX阅读 206评论 0 0