假设我有一个使用以下命令设置的位图
setbit key 0 1
setbit key 1 1
setbit key 2 0
setbit key 3 1
setbit key 4 1
Run Code Online (Sandbox Code Playgroud)
当我从 redis-cli 运行这个键时,我得到以下结果: "\xd8"
但是当我使用go-redis API 时得到了不同的结果:@
为了获得上述结果,我使用了以下代码:
package main
import (
"fmt"
"github.com/go-redis/redis"
)
func main() {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
pong, _ := client.Ping().Result()
fmt.Println(pong)
client.SetBit("key", 0, 1)
client.SetBit("key", 1, 1)
client.SetBit("key", 2, 0)
client.SetBit("key", 3, 1)
client.SetBit("key", 4, 1)
res := client.Get("bmk").Val()
fmt.Println(res)
}
Run Code Online (Sandbox Code Playgroud)
我在 redis 文档中的任何地方都找不到 cli 使用哪种编码来产生这样的结果。我也想在我的 go 程序中将结果转换为相同的格式。
有人可以告诉我这是什么类型的编码,以及如何将从 Redis API 收到的结果转换为由 CLI 获得的结果?
redis-cli 和 Go 程序对某些键的 GET 得到相同的结果。您观察到的不同之处在于结果值的输出格式。
问题中的 Go 程序按原样写入数据。
用于编码输出的 redis-cli 代码在这里。该函数对换行符、引号等使用典型的反斜杠转义\x<hex number>其他不可打印的字节。
使用 fmt 包“%q”动词以类似格式输出数据:
fmt.Printf("%q\n", res)
Run Code Online (Sandbox Code Playgroud)
如果您需要完全相同的格式,则需要将内部 Redis 函数转换为 Go。