viper读取配置文件

Reads: 125 Edit

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

Comments

Make a comment

www.ultrapower.com ,王硕的博客,专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。