diff --git a/.golangci.yml b/.golangci.yml index b88b2b9b..d15b5ac5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -22,3 +22,5 @@ linters: - exhaustivestruct - wrapcheck - errorlint + - cyclop + - forcetypeassert diff --git a/cluster.go b/cluster.go index 43dacbab..e5d49dde 100644 --- a/cluster.go +++ b/cluster.go @@ -295,8 +295,9 @@ func (c *clusterNodes) Close() error { func (c *clusterNodes) Addrs() ([]string, error) { var addrs []string + c.mu.RLock() - closed := c.closed + closed := c.closed //nolint:ifshort if !closed { if len(c.activeAddrs) > 0 { addrs = c.activeAddrs @@ -649,14 +650,15 @@ func (c *clusterStateHolder) LazyReload() { func (c *clusterStateHolder) Get(ctx context.Context) (*clusterState, error) { v := c.state.Load() - if v != nil { - state := v.(*clusterState) - if time.Since(state.createdAt) > 10*time.Second { - c.LazyReload() - } - return state, nil + if v == nil { + return c.Reload(ctx) } - return c.Reload(ctx) + + state := v.(*clusterState) + if time.Since(state.createdAt) > 10*time.Second { + c.LazyReload() + } + return state, nil } func (c *clusterStateHolder) ReloadOrGet(ctx context.Context) (*clusterState, error) { diff --git a/commands.go b/commands.go index 61e306b7..b0ed4552 100644 --- a/commands.go +++ b/commands.go @@ -1989,12 +1989,10 @@ func (c cmdable) ZIncrBy(ctx context.Context, key string, increment float64, mem } func (c cmdable) ZInterStore(ctx context.Context, destination string, store *ZStore) *IntCmd { - args := make([]interface{}, 3+len(store.Keys)) - args[0] = "zinterstore" - args[1] = destination - args[2] = len(store.Keys) - for i, key := range store.Keys { - args[3+i] = key + args := make([]interface{}, 0, 3+len(store.Keys)) + args = append(args, "zinterstore", destination, len(store.Keys)) + for _, key := range store.Keys { + args = append(args, key) } if len(store.Weights) > 0 { args = append(args, "weights") @@ -2237,12 +2235,10 @@ func (c cmdable) ZScore(ctx context.Context, key, member string) *FloatCmd { } func (c cmdable) ZUnionStore(ctx context.Context, dest string, store *ZStore) *IntCmd { - args := make([]interface{}, 3+len(store.Keys)) - args[0] = "zunionstore" - args[1] = dest - args[2] = len(store.Keys) - for i, key := range store.Keys { - args[3+i] = key + args := make([]interface{}, 0, 3+len(store.Keys)) + args = append(args, "zunionstore", dest, len(store.Keys)) + for _, key := range store.Keys { + args = append(args, key) } if len(store.Weights) > 0 { args = append(args, "weights") diff --git a/internal/pool/pool_sticky.go b/internal/pool/pool_sticky.go index c3e7e7c0..3adb99bc 100644 --- a/internal/pool/pool_sticky.go +++ b/internal/pool/pool_sticky.go @@ -172,8 +172,7 @@ func (p *StickyConnPool) Reset(ctx context.Context) error { func (p *StickyConnPool) badConnError() error { if v := p._badConnError.Load(); v != nil { - err := v.(BadConnError) - if err.wrapped != nil { + if err := v.(BadConnError); err.wrapped != nil { return err } } diff --git a/internal/proto/reader.go b/internal/proto/reader.go index 0fbc51e9..0ab8c9d2 100644 --- a/internal/proto/reader.go +++ b/internal/proto/reader.go @@ -83,7 +83,7 @@ func (r *Reader) readLine() ([]byte, error) { return nil, err } - full = append(full, b...) + full = append(full, b...) //nolint:makezero b = full } if len(b) <= 2 || b[len(b)-1] != '\n' || b[len(b)-2] != '\r' { diff --git a/internal/proto/scan.go b/internal/proto/scan.go index c2c3ed17..7d7183c3 100644 --- a/internal/proto/scan.go +++ b/internal/proto/scan.go @@ -10,7 +10,6 @@ import ( ) // Scan parses bytes `b` to `v` with appropriate type. -// nolint: gocyclo func Scan(b []byte, v interface{}) error { switch v := v.(type) { case nil: diff --git a/pubsub.go b/pubsub.go index c56270b4..bd5bd2ad 100644 --- a/pubsub.go +++ b/pubsub.go @@ -118,7 +118,7 @@ func mapKeys(m map[string]struct{}) []string { i := 0 for k := range m { s[i] = k - i++ + i++ // nolint:wastedassign } return s } diff --git a/redis.go b/redis.go index c3882e01..7995c436 100644 --- a/redis.go +++ b/redis.go @@ -305,7 +305,8 @@ func (c *baseClient) withConn( c.releaseConn(ctx, cn, err) }() - done := ctx.Done() + done := ctx.Done() //nolint:ifshort + if done == nil { err = fn(ctx, cn) return err diff --git a/sentinel.go b/sentinel.go index 85b459b8..efa2a41d 100644 --- a/sentinel.go +++ b/sentinel.go @@ -625,7 +625,7 @@ func parseSlaveAddrs(addrs []interface{}, keepDisconnected bool) []string { func (c *sentinelFailover) trySwitchMaster(ctx context.Context, addr string) { c.mu.RLock() - currentAddr := c._masterAddr + currentAddr := c._masterAddr //nolint:ifshort c.mu.RUnlock() if addr == currentAddr {