package main import ( "fmt" "github.com/spf13/viper" ) // 配置结构体 type Config struct { App AppConfig `mapstructure:"app"` Database DatabaseConfig `mapstructure:"database"` Redis RedisConfig `mapstructure:"redis"` } type AppConfig struct { Name string `mapstructure:"name"` Version string `mapstructure:"version"` Port int `mapstructure:"port"` } type DatabaseConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` Username string `mapstructure:"username"` Password string `mapstructure:"password"` DBName string `mapstructure:"dbname"` } type RedisConfig struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` Password string `mapstructure:"password"` DB int `mapstructure:"db"` } func main() { // 读取配置文件 viper.SetConfigName("config") viper.SetConfigType("yaml") viper.AddConfigPath(".") if err := viper.ReadInConfig(); err != nil { panic(err) } // 将配置绑定到结构体 var config Config if err := viper.Unmarshal(&config); err != nil { panic(err) } // 使用配置 fmt.Printf("App: %s v%s\n", config.App.Name, config.App.Version) fmt.Printf("Port: %d\n", config.App.Port) fmt.Printf("Database: %s@%s:%d/%s\n", config.Database.Username, config.Database.Host, config.Database.Port, config.Database.DBName, ) fmt.Printf("Redis: %s:%d (DB %d)\n", config.Redis.Host, config.Redis.Port, config.Redis.DB, ) }