package config import ( "github.com/spf13/viper" ) type Config struct { Server ServerConfig Database DatabaseConfig } type ServerConfig struct { Port int } type DatabaseConfig struct { Host string Port int User string Password string DBName string SSLMode string } func Load() (*Config, error) { viper.SetConfigName("config") viper.SetConfigType("yaml") viper.AddConfigPath("./config") viper.AddConfigPath("../config") viper.AddConfigPath("../../config") viper.SetDefault("server.port", 9000) viper.SetDefault("database.host", "backend-postgres") viper.SetDefault("database.port", 5432) viper.SetDefault("database.user", "admin") viper.SetDefault("database.password", "password") viper.SetDefault("database.dbname", "backend") viper.SetDefault("database.sslmode", "disable") if err := viper.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); !ok { return nil, err } } var config Config if err := viper.Unmarshal(&config); err != nil { return nil, err } return &config, nil }