diff --git a/cache/cache.go b/cache/cache.go index 70ada0e..9b62b66 100644 --- a/cache/cache.go +++ b/cache/cache.go @@ -19,13 +19,13 @@ var conn Cache // default to memory cache func init() { - switch env.Int("CACHE_DRIVER", 0) { - case Memory: + switch env.Get("CACHE_DRIVER", "redis") { + case "memory": conn = newMemoryCache() - case Redis: + case "redis": conn = newRedisCache() default: - panic("unknown cache driver") + conn = newRedisCache() } } diff --git a/cache/redis.go b/cache/redis.go index 2a2c777..b01e32d 100644 --- a/cache/redis.go +++ b/cache/redis.go @@ -15,10 +15,29 @@ type redisCache struct { } func newRedisCache() Cache { + host := env.Get("REDIS_HOST") + port := env.Get("REDIS_PORT") + + url := "" + if host != "" && port != "" { + url = host + ":" + port + goto initRedis + } + + if url == "" { + url = env.Get("REDIS_URL") + } + + if url == "" { + logs.Error("newRedisCache: REDIS_HOST, REDIS_PORT or REDIS_URL must be set") + return newMemoryCache() + } + +initRedis: cl := redis.NewClient(&redis.Options{ - Addr: env.Get("REDIS_URL", "localhost:6379"), - Password: env.Get("REDIS_PASSWORD", ""), - DB: env.Int("REDIS_DB_INDEX", 0), + Addr: url, + Password: env.Get("REDIS_PASSWORD"), + DB: env.Int("REDIS_DB_INDEX"), }) if err := cl.Ping(context.Background()).Err(); err != nil { diff --git a/env/env.go b/env/env.go index b211a8a..3f82fcb 100644 --- a/env/env.go +++ b/env/env.go @@ -8,61 +8,65 @@ import ( _ "github.com/joho/godotenv/autoload" ) -// Get returns env variable or the provided default value when variable not found -func Get(name string, defaults ...string) string { - defaultValue := "" +func defaultValue[T any](defaults ...T) T { if len(defaults) > 0 { - defaultValue = defaults[0] + return defaults[0] } + var zero T + return zero +} + +// Get returns env variable or the provided default value when variable not found +func Get(name string, defaults ...string) string { value, ok := os.LookupEnv(name) if !ok { - return defaultValue + return defaultValue(defaults...) } return value } // Int returns an integer from env variable or the provided default value when variable not found -func Int(name string, defaultValue int) int { +func Int(name string, defaults ...int) int { value, ok := os.LookupEnv(name) if !ok { - return defaultValue + return defaultValue(defaults...) } val, err := strconv.Atoi(value) if err != nil { - return defaultValue + return defaultValue(defaults...) } return val } // Bool returns a boolean from env variable or the provided default value when variable not found -func Bool(name string, defaultValue bool) bool { +func Bool(name string, defaults ...bool) bool { value, ok := os.LookupEnv(name) if !ok { - return defaultValue + return defaultValue(defaults...) } val, err := strconv.ParseBool(value) if err != nil { - return defaultValue + return defaultValue(defaults...) } return val } // Float returns a float from env variable or the provided default value when variable not found -func Float(name string, defaultValue float64) float64 { +func Float(name string, defaults ...float64) float64 { value, ok := os.LookupEnv(name) if !ok { - return defaultValue + return defaultValue(defaults...) } val, err := strconv.ParseFloat(value, 64) if err != nil { - return defaultValue + return defaultValue(defaults...) } return val diff --git a/gttp/default.go b/gttp/default.go index b6c6c9e..a2dbeb9 100644 --- a/gttp/default.go +++ b/gttp/default.go @@ -54,7 +54,9 @@ func (c *defaultClient) sendRequest(url, method string, headers M, body []byte, return } - defer res.Body.Close() + defer func() { + _ = res.Body.Close() + }() content, err := io.ReadAll(res.Body) if err != nil { diff --git a/gttp/gttp.go b/gttp/gttp.go index e047777..6a87984 100644 --- a/gttp/gttp.go +++ b/gttp/gttp.go @@ -6,13 +6,6 @@ import ( "github.com/ochom/gutils/env" ) -type ClientType int - -const ( - DefaultHttp = iota - GoFiber -) - type Client interface { post(url string, headers M, body []byte, timeout ...time.Duration) (resp *Response, err error) get(url string, headers M, timeout ...time.Duration) (resp *Response, err error) @@ -22,13 +15,13 @@ type Client interface { var client Client func init() { - switch env.Int("HTTP_CLIENT", 1) { - case DefaultHttp: + switch env.Get("HTTP_CLIENT", "fiber") { + case "default": client = new(defaultClient) - case GoFiber: + case "fiber": client = new(fiberClient) default: - panic("unknown http client") + client = new(fiberClient) } }