关于形参定义的一点想法
// Increment 当参数只有 1 个时,为 key,其值增加 1。
// 当参数有 2 个时,第一个参数为 key ,第二个参数为要增加的值 int64 类型。
func (rds RedisClient) Increment(parameters ...interface{}) bool {
switch len(parameters) {
case 1:
key := parameters[0].(string)
if err := rds.Client.Incr(rds.Context, key).Err(); err != nil {
logger.ErrorString("Redis", "Increment", err.Error())
return false
}
case 2:
key := parameters[0].(string)
value := parameters[1].(int64)
if err := rds.Client.IncrBy(rds.Context, key, value).Err(); err != nil {
logger.ErrorString("Redis", "Increment", err.Error())
return false
}
default:
logger.ErrorString("Redis", "Increment", "参数过多")
return false
}
return true
}
// Decrement 当参数只有 1 个时,为 key,其值减去 1。
// 当参数有 2 个时,第一个参数为 key ,第二个参数为要减去的值 int64 类型。
...
对于课程里上面这段代码,有个疑问,既然第一个参数一定是 key string 类型,第二个值一定是value int64,那么入参写成下面这样会不会好一点?
// Increment 增加, 支持两个参数,第一个为 key,第二个为增加的值(可选)
// 如果只有一个参数,则为增加 1, 如果有第二个参数,则为增加该值
func (rds *RedisClient) Increment(key string, value ...int64) bool {
switch len(value) {
case 0:
if err := rds.Client.Incr(rds.Context, key).Err(); err != nil {
logger.ErrorString("Redis", "Incr", err.Error())
return false
}
case 1:
if err := rds.Client.IncrBy(rds.Context, key, value[0]).Err(); err != nil {
logger.ErrorString("Redis", "IncrBy", err.Error())
return false
}
default:
logger.ErrorString("Redis", "Increment", "参数过多")
return false
}
return true
}