-
main.go
:package main import ( "fmt" "os" "github.com/spf13/pflag" "github.com/spf13/viper" ) func main() { // 1. 设置 Viper 配置 viper.SetConfigName("config") // 配置文件名(不带后缀) viper.AddConfigPath(".") // 配置文件路径 viper.SetConfigType("yaml") // 配置文件类型 viper.AutomaticEnv() // 自动读取环境变量 // 2. 设置命令行参数 pflag.String("name", "", "project name") pflag.String("host", "", "host address") pflag.String("port", "", "port number") pflag.String("config", "./config.yaml", "config file") // 配置文件参数 pflag.Parse() viper.BindPFlags(pflag.CommandLine) // 将命令行参数绑定到 Viper // 3. 读取配置文件 if configFile := viper.GetString("config"); configFile != "" { fmt.Println(configFile) if err := viper.ReadInConfig(); err != nil { fmt.Fprintf(os.Stderr, "读取配置文件失败:%v\n", err) os.Exit(1) } } // 4. 读取配置项 projectName := viper.GetString("name") port := viper.GetInt("port") fmt.Printf("ProjectName: %s, Port: %d\n", projectName, port) }
-
config.yaml
:name: hello host: 10.10.0.172 port: 9090
-
支持环境变量、命令行参数、配置文件。
- 支持多种配置文件,包括 JSON,YAML,TOML,INI 等。
- 支持监控配置文件的变化,会自动加载新的配置。
-
支持从远程加载配置,比如 etcd、zk、consul、redis 等,
也可以通过 RemoteProvider 接口自定义远程数据源:type RemoteProvider interface { Set(key string, value []byte) error Watch(key string) (chan *RemoteResponse, chan error) Get(key string) ([]byte, error) }
-
支持默认值。
TOC
Viper: Go 项目配置管理
发布于码厩技术博客的所有文章,除注明转载外,均为作者原创,欢迎转载,但必须注明出处。
尊重他人劳动,共创开源社区!转载请注明以下信息:
转载来源: 码厩技术博客 [https://www.markjour.com]
原文标题:Viper: Go 项目配置管理
原文地址:/article/20220722-viper.html
尊重他人劳动,共创开源社区!转载请注明以下信息:
转载来源: 码厩技术博客 [https://www.markjour.com]
原文标题:Viper: Go 项目配置管理
原文地址:/article/20220722-viper.html
