Go小工具之Viper高级用法

背景:

        前面已经做了Viper等一些小工具的使用方法介绍,但是介绍的都是简单的入门级别的使用,真正的开发中不会那样使用,下面就写个简单地测试用例,介绍项目中该如何使用Viper具体的请看下面链接:

https://blog.csdn.net/gcglhd/article/details/109243437

步骤: 

        首先还是配置文件的相关配置:

settings:
  jwt:
    # token 密钥,生产环境时及的修改
    secret: go-admin
    # token 过期时间 单位:秒
    timeout: 3600
  database:
    # 数据库类型 mysql,sqlite3, postgres
    driver: mysql
    # 数据库连接字符串 mysql 缺省信息 
    source: root:560298@tcp(127.0.0.1:3306)/goadmincharset=utf8&parseTime=True&loc=Local&timeout=1000ms

     然后假设我们要使用数据库的相关配置信息:database

第一步:   我们先写一个数据结构进行说明该字段:

  type Database struct {
     Driver string
     Source string
  }
 var DatabaseConfig = new(Database) //设置全局的变量采用new方式获得的引用型全局数据

第二步:编写相关函数来主动获取配置文件中的database的子属性值:

  func InitDatabase(cfg *viper.Viper) *Database {
 
    db := &Database{
       Driver: cfg.GetString("driver"),
       Source: cfg.GetString("source"),
    }
    return db
 }

     接着就是对相关的测试:

注意事项:

    1. 路径值一定要书写正确,我的test测试文件和conf是同一级目录所以直接这样写,如果不在同一级可以采用绝对路径或者相对路径都可以的。

    2. 真正的开发中上面的第一步,第二步,会根据不同的业务需求写一个专门的文件夹进行相关的管理。

func Test4(t *testing.T) {
	viper.SetConfigFile("conf/settings.yml")
	content, err := ioutil.ReadFile("conf/settings.yml")
	if err != nil {
		log.Fatal(fmt.Sprintf("Read config file fail: %s", err.Error()))
	}

	//Replace environment variables
	err = viper.ReadConfig(strings.NewReader(os.ExpandEnv(string(content))))
	if err != nil {
		log.Fatal(fmt.Sprintf("Parse config file fail: %s", err.Error()))
	}

	cfgDatabase := viper.Sub("settings.database")
	if cfgDatabase == nil {
		panic("No found settings.database in the configuration")
	}
	DatabaseConfig = InitDatabase(cfgDatabase)
	fmt.Println("DatabaseConfig Driver值: ", DatabaseConfig.Driver)
	fmt.Println("DatabaseConfig Source值: ", DatabaseConfig.Source)
}

   运行结果:


RUN   Test4
DatabaseConfig Driver值:  mysql
DatabaseConfig Source值:  root:560298@tcp(127.0.0.1:3306)/goadmin?charset=utf8&parseTime=True&loc=Local&timeout=1000ms
PASS

附件:所有的相关测试代码

/**
 * @Author GCG
 * @Date : 2020/11/11
 * @Description:  功能描述 :该案例是使用Viper的高级使用,项目中大多会采用该方式。
 */
type Database struct {
	Driver string
	Source string
}
var DatabaseConfig = new(Database) //设置全局的变量

func Test4(t *testing.T) {
	viper.SetConfigFile("conf/settings.yml")
	content, err := ioutil.ReadFile("conf/settings.yml")
	if err != nil {
		log.Fatal(fmt.Sprintf("Read config file fail: %s", err.Error()))
	}

	//Replace environment variables
	err = viper.ReadConfig(strings.NewReader(os.ExpandEnv(string(content))))
	if err != nil {
		log.Fatal(fmt.Sprintf("Parse config file fail: %s", err.Error()))
	}

	cfgDatabase := viper.Sub("settings.database")
	if cfgDatabase == nil {
		panic("No found settings.database in the configuration")
	}
	DatabaseConfig = InitDatabase(cfgDatabase)
	fmt.Println("DatabaseConfig Driver值: ", DatabaseConfig.Driver)
	fmt.Println("DatabaseConfig Source值: ", DatabaseConfig.Source)
}
func InitDatabase(cfg *viper.Viper) *Database {

	db := &Database{
		Driver: cfg.GetString("driver"),
		Source: cfg.GetString("source"),
	}
	return db
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值