diff options
| author | Bobby <[email protected]> | 2026-01-15 15:53:17 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-01-15 15:53:17 +0530 |
| commit | c8d0bbb5b54f5cec3ebb245f9a21d8a94b3bd944 (patch) | |
| tree | 6a5c2500da90253ad07a0d5192071bb77f093d36 /utils/env/functions.go | |
| download | cafe-c8d0bbb5b54f5cec3ebb245f9a21d8a94b3bd944.tar.xz cafe-c8d0bbb5b54f5cec3ebb245f9a21d8a94b3bd944.zip | |
Add initial project structure with Go Fiber framework and environment configuration
Diffstat (limited to 'utils/env/functions.go')
| -rw-r--r-- | utils/env/functions.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/utils/env/functions.go b/utils/env/functions.go new file mode 100644 index 0000000..de03793 --- /dev/null +++ b/utils/env/functions.go @@ -0,0 +1,97 @@ +package env + +import ( + "os" + "reflect" + "strconv" + "strings" + "time" +) + +func getEnv(key, defaultVal string) string { + if value := os.Getenv(key); value != "" { + return value + } + return defaultVal +} + +func getEnvBool(key string, defaultVal bool) bool { + if value := os.Getenv(key); value != "" { + if parsed, err := strconv.ParseBool(value); err == nil { + return parsed + } + } + return defaultVal +} + +func getEnvDuration(key string, defaultVal time.Duration) time.Duration { + if value := os.Getenv(key); value != "" { + if parsed, err := time.ParseDuration(value); err == nil { + return parsed + } + } + return defaultVal +} + +func getEnvInt(key string, defaultVal int64) int64 { + if value := os.Getenv(key); value != "" { + if parsed, err := strconv.ParseInt(value, 10, 64); err == nil { + return parsed + } + } + return defaultVal +} + +func getEnvFloat(key string, defaultVal float64) float64 { + if value := os.Getenv(key); value != "" { + if parsed, err := strconv.ParseFloat(value, 64); err == nil { + return parsed + } + } + return defaultVal +} + +func getEnvStringSlice(key string, defaultVal []string) []string { + if value := os.Getenv(key); value != "" { + parts := strings.Split(value, ",") + result := make([]string, 0, len(parts)) + for _, part := range parts { + trimmed := strings.TrimSpace(part) + if trimmed != "" { + result = append(result, trimmed) + } + } + return result + } + return defaultVal +} + +func Defaults[T any](config *T) *T { + v := reflect.ValueOf(config) + if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct { + return config + } + + elem := v.Elem() + t := elem.Type() + newStruct := reflect.New(t) + newElem := newStruct.Elem() + + for i := range elem.NumField() { + field := newElem.Field(i) + fieldType := t.Field(i) + + if !field.CanSet() { + continue + } + + defaultVal := fieldType.Tag.Get("default") + if defaultVal == "" { + continue + } + + setFieldDefault(field, defaultVal) + } + + return newStruct.Interface().(*T) +} |
