// package main // // import ( // // "fmt" // "os" // // "github.com/spf13/viper" // // ) // // func main() { // // 方案:先设置环境变量,再设置前缀和绑定 // // 1. 先设置环境变量(模拟) // os.Setenv("MYAPP_PORT", "9000") // os.Setenv("MYAPP_DEBUG", "true") // os.Setenv("MYAPP_DB_HOST", "192.168.1.100") // // // 2. 设置环境变量前缀 // viper.SetEnvPrefix("MYAPP") // // // 3. 设置默认值 // viper.SetDefault("port", 8080) // viper.SetDefault("debug", false) // viper.SetDefault("db.host", "localhost") // // // 4. 绑定环境变量 - 显式指定完整的环境变量名(不加前缀) // viper.BindEnv("port", "MYAPP_PORT") // viper.BindEnv("debug", "MYAPP_DEBUG") // viper.BindEnv("db.host", "MYAPP_DB_HOST") // 直接指定完整的环境变量名 // // // 5. 读取配置 // port := viper.GetInt("port") // debug := viper.GetBool("debug") // dbHost := viper.GetString("db.host") // // fmt.Printf("Port: %d (from env)\n", port) // fmt.Printf("Debug: %v (from env)\n", debug) // fmt.Printf("DB Host: %s (from env)\n", dbHost) // // // 6. 启用自动环境变量绑定 // viper.AutomaticEnv() // // // 设置自定义环境变量后获取 // os.Setenv("MYAPP_CUSTOM_KEY", "custom_value") // // 注意:AutomaticEnv 后,MYAPP_CUSTOM_KEY 会映射到 custom_key // customKey := viper.GetString("custom_key") // fmt.Printf("Custom Key: %s\n", customKey) // // // 验证环境变量是否真的设置成功 // fmt.Println("\n=== 验证环境变量 ===") // fmt.Printf("MYAPP_PORT: %s\n", os.Getenv("MYAPP_PORT")) // fmt.Printf("MYAPP_DEBUG: %s\n", os.Getenv("MYAPP_DEBUG")) // fmt.Printf("MYAPP_DB_HOST: %s\n", os.Getenv("MYAPP_DB_HOST")) // } package main import ( "fmt" "os" "strings" "github.com/spf13/viper" ) func main() { // 1. 设置环境变量前缀 viper.SetEnvPrefix("MYAPP") // 自动添加前缀 viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) // 2. 绑定环境变量 viper.BindEnv("port") // 绑定 MYAPP_PORT viper.BindEnv("debug") // 绑定 MYAPP_DEBUG viper.BindEnv("db.host") // 绑定 MYAPP_DB_HOST // 3. 设置默认值 viper.SetDefault("port", 8080) viper.SetDefault("debug", false) // 4. 设置环境变量(模拟) os.Setenv("MYAPP_PORT", "9000") os.Setenv("MYAPP_DEBUG", "true") os.Setenv("MYAPP_DB_HOST", "192.168.1.100") // 5. 读取配置(优先级:环境变量 > 配置文件 > 默认值) port := viper.GetInt("port") debug := viper.GetBool("debug") dbHost := viper.GetString("db.host") fmt.Printf("Port: %d (from env)\n", port) fmt.Printf("Debug: %v (from env)\n", debug) fmt.Printf("DB Host: %s (from env)\n", dbHost) // 6. 自动绑定所有环境变量 viper.AutomaticEnv() os.Setenv("MYAPP_CUSTOM_KEY", "custom_value") customKey := viper.GetString("custom.key") // 自动转换 CUSTOM_KEY -> custom.key fmt.Printf("Custom Key: %s\n", customKey) }