package config import ( "log" "os" "github.com/spf13/viper" ) func ConfigDir() string { env := os.Getenv("CONFIG_PATH") if env != "" { return env } return "." } func Init() { // Read global config viper.SetConfigName("config") viper.SetConfigType("yaml") viper.AddConfigPath(ConfigDir()) // Bind ENV viper.BindEnv("server.address", "SERVER_ADDRESS") viper.BindEnv("server.debug_mode", "SERVER_DEBUG_MODE") viper.BindEnv("server.file_logger", "SERVER_FILE_LOGGER") viper.BindEnv("server.jwt_secret", "SERVER_JWT_SECRET") viper.BindEnv("database.type", "DATABASE_TYPE") viper.BindEnv("database.host", "DATABASE_HOST") viper.BindEnv("database.name", "DATABASE_NAME") viper.BindEnv("database.username", "DATABASE_USERNAME") viper.BindEnv("database.password", "DATABASE_PASSWORD") conf := &config{} if err := viper.ReadInConfig(); err != nil { // Dont generate config when using dev mode log.Fatalln("Can't read config!") } if err := viper.Unmarshal(conf); err != nil { log.Fatal(err) } }