背景:
前面已经做了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
}