package main import ( "github.com/spf13/viper" "log" ) type config struct { server *configServer db *configDb } type configServer struct { logging bool port int } type configDb struct { file string } var appConfig = &config{ server: &configServer{}, db: &configDb{}, } func initConfig() error { viper.SetConfigName("config") viper.AddConfigPath("./config/") err := viper.ReadInConfig() if err != nil { return err } // Server serverLogging := "server.logging" viper.SetDefault(serverLogging, false) appConfig.server.logging = viper.GetBool(serverLogging) logConfig(serverLogging, appConfig.server.logging) serverPort := "server.port" viper.SetDefault(serverPort, 8080) appConfig.server.port = viper.GetInt(serverPort) logConfig(serverPort, appConfig.server.port) // Database databaseFile := "database.file" viper.SetDefault(databaseFile, "data/db.sqlite") appConfig.db.file = viper.GetString(databaseFile) logConfig(databaseFile, appConfig.db.file) return nil } func logConfig(key string, value interface{}) { log.Println(key+":", value) }