我尝试用 Go 编写一个 kv-raft 服务器代码。(参考这篇文章)。
context.Context
但是,如果我想在我的 RPC 调用参数中使用,我发现有问题
// Init of my RPC server
kv := new(KVRaft)
rpcs := rpc.NewServer()
rpcs.Register(kv)
....
//My RPC call function
func (kv *KVRaft) Msg(args *context.Context, reply *MsgReply) error {
log.Println("[MSG]", *args)
return nil
}
可以编译代码但是当我尝试运行时
c, _ := rpc.Dial("tcp", ":1234")
var reply MsgReply{}
c.Call("KVRaft.Msg", someContext, &reply)
它会弹出错误为 gob: type not registered for interface: context.emptyCtx
如果我替换*context.Context
为*string
. 我用谷歌搜索它可以使用gob.Register()
,但我编译失败了gob.Register(context.Context{})
invalid type for composite literal: "golang.org/x/net/context".Context
知道如何context.Context
作为 gob RPC 调用参数传递吗?
[更新]
我尝试使用gob.Register(context.Background())
,但在接收 RPC 调用时它会得到空上下文。
[更新] 目前我的回购在这里,但仍在进行中。