package config import ( "encoding/json" "fmt" "os" "strings" ) var config map[string]interface{} func Load(path string) error { err := loadConfigFile(path) if err != nil { return err } env := os.Getenv("addrss_ENVIRONMENT") if env != "" { path = strings.ReplaceAll(path, ".json", "."+env+".json") err = loadConfigFile(path) if err != nil { return err } } return nil } func GetString(key string) (string, error) { v, err := Get(key) if err != nil { return "", err } return v.(string), nil } func GetInt64(key string) (int64, error) { v, err := Get(key) if err != nil { return 0, err } return int64(v.(float64)), nil } func GetBool(key string) (bool, error) { v, err := Get(key) if err != nil { return false, err } return v.(bool), nil } func Get(key string) (interface{}, error) { value, ok := config[key] if !ok { return nil, fmt.Errorf("configuration value not found for key %s", key) } switch v := value.(type) { case string: if strings.Contains(v, "{{") && strings.Contains(v, "}}") { _, a, _ := strings.Cut(v, "{{") envVar, _, _ := strings.Cut(a, "}}") value = strings.ReplaceAll(v, "{{"+envVar+"}}", os.Getenv(envVar)) } return value, nil default: return value, nil } } func loadConfigFile(path string) error { contents, err := os.ReadFile(path) if err != nil { return err } err = json.Unmarshal(contents, &config) if err != nil { return err } return nil }