起因
package main
import (
"context"
"fmt"
"math/rand"
"reflect"
"time"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "xxx.xx.xxx.xx:6379",//请换成自己的ip地址
Password: "", // no password set
DB: 0, // use default DB
})
_, err := rdb.Ping(ctx).Result()
if err != nil {
panic(err)
}
rand.Seed(time.Now().UnixNano())
getAllData(rdb)
}
func getAllData(rdb *redis.Client) {
val, err := rdb.Do(ctx, "keys", "*").Result()
if err != nil {
panic(err)
}
fmt.Println(reflect.TypeOf(val))
fmt.Println(val)
}
从redis拿到的数据是一个interface{}类型,但当我想遍历这个类型时却报错了
cannot range over val (type interface {})
说不能遍历这个类型
把它强制转换成[]interface{}就可以遍历了
但这里遍历出来的v还是interface{}类型
解决:使用fmt.Sprintf函数
for k, v := range val.([]interface{}) {
str := fmt.Sprintf("%v", v)
fmt.Println(k, str)
}
这样就成功转为string类型了