package config import ( "os" "path/filepath" "github.com/rogeecn/atom/container" "github.com/spf13/viper" ) func Load(file, app string) (*viper.Viper, error) { v := viper.NewWithOptions(viper.KeyDelimiter("_")) v.AutomaticEnv() if file == "" { v.SetConfigType("toml") v.SetConfigName(app) //execute path execPath, err := os.Executable() if err == nil { v.AddConfigPath(filepath.Dir(execPath)) } //home path homePath, err := os.UserHomeDir() if err == nil { v.AddConfigPath(homePath) v.AddConfigPath(homePath + "/" + app) v.AddConfigPath(homePath + "/.config") v.AddConfigPath(homePath + "/.config/" + app) } v.AddConfigPath("/etc") v.AddConfigPath("/etc/" + app) v.AddConfigPath("/usr/local/etc") v.AddConfigPath("/usr/local/etc/" + app) } else { v.SetConfigFile(file) } if err := v.ReadInConfig(); err != nil { return nil, err } err := container.Container.Provide(func() (*viper.Viper, error) { return v, nil }) if err != nil { return nil, err } return v, nil }