Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
}

}
Expand Down
25 changes: 22 additions & 3 deletions cache/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
32 changes: 18 additions & 14 deletions env/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion gttp/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
15 changes: 4 additions & 11 deletions gttp/gttp.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
}
}

Expand Down
Loading