package config import ( "os" "strings" ) func loadDotEnv() { filename := ".env.local" if isProductionEnv() { filename = ".env.production.local" } loadDotEnvFile(filename) } func isProductionEnv() bool { for _, key := range []string{"SPROUTWORKCOLLECT_ENV", "ENV", "GIN_MODE"} { if v := strings.ToLower(strings.TrimSpace(os.Getenv(key))); v != "" { return v == "production" || v == "prod" || v == "release" } } return false } func loadDotEnvFile(filename string) { data, err := os.ReadFile(filename) if err != nil { return } lines := strings.Split(string(data), "\n") for _, line := range lines { trimmed := strings.TrimSpace(line) if trimmed == "" || strings.HasPrefix(trimmed, "#") { continue } if strings.HasPrefix(trimmed, "export ") { trimmed = strings.TrimSpace(strings.TrimPrefix(trimmed, "export ")) } key, value, ok := strings.Cut(trimmed, "=") if !ok { continue } key = strings.TrimSpace(key) value = strings.TrimSpace(value) if key == "" { continue } if len(value) >= 2 { if (value[0] == '"' && value[len(value)-1] == '"') || (value[0] == '\'' && value[len(value)-1] == '\'') { value = value[1 : len(value)-1] } } if _, exists := os.LookupEnv(key); exists { continue } _ = os.Setenv(key, value) } }