Viper
安装模块
go get github.com/spf13/viper
如果安装模块失败,要清理缓存
go mod tidy
新建项目,在项目下创建 .env 文件,文件内容如下
# dev , prod , test
app_env=dev
SERVER_PORT=8080
在项目下创建config目录,然后再目录下创建 config.go
package config
import (
"fmt"
"github.com/mitchellh/mapstructure"
"github.com/spf13/viper"
)
type ServerConfiguration struct {
App string `mapstructure:"app_env"` // 服务器使用的应用
Port string `mapstructure:"SERVER_PORT"` // 服务器使用的端口
}
type Configuration struct {
Server ServerConfiguration `mapstructure:",squash"`
}
var config Configuration
func GetConfig() Configuration {
return config
}
func InitializeConfig() {
var result map[string]interface{}
// 初始化 viper
v := viper.New()
v.SetConfigFile(".env")
if err := v.ReadInConfig(); err != nil {
fmt.Printf("Error reading config file, %s", err)
}
err := v.Unmarshal(&result)
if err != nil {
fmt.Printf("Unable to decode into map, %v", err)
}
decErr := mapstructure.Decode(result, &config)
if decErr != nil {
fmt.Println("error decoding")
}
//fmt.Printf("config:%+v\n", config)
}
在入口 main.go文件中使用cfg读取配置文件.env的内功
config.InitializeConfig()
cfg := config.GetConfig()
fmt.Printf("cfg:%+v\n", cfg)
log.Println("app=", cfg.Server.App, ", port=", cfg.Server.Port)
参考资料
https://www.cnblogs.com/wzh2010/p/18364344