package cache import ( "context" "fmt" ) type option struct { ctx context.Context redis *string memory bool } type Option func(*option) func WithCtx(ctx context.Context) Option { return func(c *option) { if ctx != nil { c.ctx = ctx } } } func WithRedis(host string, port int, username, password string) Option { return func(c *option) { uri := fmt.Sprintf("redis://%s:%d", host, port) if username != "" || password != "" { uri = fmt.Sprintf("redis://%s:%s@%s:%d", username, password, host, port) } c.redis = &uri } } func WithMemory() Option { return func(c *option) { c.memory = true } }