go - 名称未注册接口(interface)

标签 go rpc gob

我正在尝试通过 RPC 发送一个具体的实现。 RPC 方法需要一个接口(interface)。

相关的代码片段是:

在包 node 中:

type Commander interface {
    Action() string   
}

type Approach struct {
    Position int   
}

func (p Approach) Action() string {
    return "Approach"   
}

func (t *RPCMethod) RPCAction(command Commander, reply *int) error {
    // RPC Method
}

在包 main 中:

import "node"

gob.Register(node.Approach{})
var p = node.Approach{position}
var q node.Commander = p

var reply int
err = client.Call("RPCMethod.RPCAction",&q, &reply)

我已经在 gob 中注册了 node.Approach。但是在运行我收到的主程序时

gob: name not registered for interface: "node.Approach"

对我做错了什么有什么想法吗?或者如何注册名字?

最佳答案

是的,您已经向 gob 注册了 node.Approach。但是随后您传递了 q不是 node.Approach。改为发送 p,因为它具有您注册的类型。

关于go - 名称未注册接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182905/

相关文章:

json - 有没有一种方法可以通过转换类型在 Go 中解码 JSON?

java - ZeroMQ 用于移动 Protocol Buffer 有效负载的替代方案是什么?

kubernetes - gRPC 和 Kubernetes 连接是否只拨号到一个副本?

go - 如何通过 Kafka 生产者发送 Protobuf 消息

go - 读取用户输入并将其拆分为两个 float64 数字

sql - NOW() 不能用于查询(它不存在)

Qt 和 Boost RPC

go - gob.Register 方法的目的是什么?

Golang RPC 编码自定义函数

performance - 直接在源码中使用gobs,可以吗?