Golang Go语言中 [求助] go-redis, 如何将 pipeline 传入函数
Golang Go语言中 [求助] go-redis, 如何将 pipeline 传入函数
和 issues #1164 遇到的问题一样
我的目的
将 pipeline 传入其他函数后,还能正常使用 redis 命令
func main() {
client := redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
Password: "",
DB: 0,
})
pipe := client.Pipeline() // 1. 现在 pipe 的类型是 Pipeliner interface
pipe.Hset("yo", "key", "test") // 2. 在这里可以正常使用 redis 命令
test(&pipe)
pipe.Exec()
}
func test(pipe *redis.Pipeliner) {
pipe.HSet(“yo”, “key”, “test”) // 3. 在这里就不行了, 现在的 pipe 一个 method 都没有
}
已经尝试过的方法
因为 redis.Pipeline type 可以直接使用 redis 命令,
所以尝试 cast Interface
func test(pipe *redis.Pipeliner) {
p := pipe.(*redis.Pipeline) // IDE 提示 invalid type assertion, (no interface-type *redis.Pipeline on left)
}
更多关于Golang Go语言中 [求助] go-redis, 如何将 pipeline 传入函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Pipeliner 是 interface 啊,你加*做什么…
更多关于Golang Go语言中 [求助] go-redis, 如何将 pipeline 传入函数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
老哥强啊,不加 * 就可以了
😳抱歉,犯蠢了,刚学 golang 不久
#1
interface 为什么不能加*?
求解
我也是刚学 go
我感受到 github 对面传来的一股哀怨 /捂脸
Pipeliner 传递过来的 interface 是指针,在对他取址,就找不到方法了
func (c *Client) Pipeline() Pipeliner {
pipe := Pipeline{
ctx: c.ctx,
exec: c.processPipeline,
}
pipe.init()
return &pipe
}
在Go语言中,使用go-redis
库进行Redis操作时,Pipeline 是一个非常有用的特性,它可以让你批量执行Redis命令,从而提高性能。如果你想将Pipeline传入函数,可以按照以下步骤进行:
-
导入必要的包: 确保你已经导入了
go-redis/v8
(或其他版本)包。 -
创建Redis客户端: 使用
redis.NewClient
函数创建一个Redis客户端实例。 -
创建Pipeline: 使用客户端的
Pipeline
方法创建一个Pipeline实例。 -
定义函数: 定义一个接收
redis.Pipeliner
接口作为参数的函数。这允许你传递任何实现了该接口的Pipeline实例。 -
在函数中使用Pipeline: 在函数内部,你可以像使用普通客户端一样使用Pipeline实例执行命令。
-
执行Pipeline: 在函数外部,调用Pipeline的
Exec
方法以执行所有排队的命令。
下面是一个简单的示例代码:
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func processPipeline(ctx context.Context, pipe redis.Pipeliner) {
pipe.Set(ctx, "key", "value", 0)
}
func main() {
rdb := redis.NewClient(&redis.Options{})
ctx := context.Background()
pipe := rdb.Pipeline()
processPipeline(ctx, pipe)
cmds, err := pipe.Exec(ctx)
if err != nil {
fmt.Println(err)
}
// 处理cmds结果
}
这样,你就可以将Pipeline实例传入函数并在其中执行Redis命令了。