为了账号安全,请及时绑定邮箱和手机立即绑定

口径:未注册接口的类型:快速浏览 ftv1。广播消息

口径:未注册接口的类型:快速浏览 ftv1。广播消息

Go
烙印99 2022-09-12 20:14:19
我的代码组织结构是这样的package_name/    server/        rpc_server.go    client_test.go我注册一个 RPC 服务器以接收来自其他节点的消息。type RPCMessageArgs struct {    Operation string    Info      Message}type Message struct {    NodeID  uint64    Payload interface{}}func init() {    gob.Register(BroadcastMessage{})}func main() {    // start rpc server}我使用命令 启动服务器文件夹中的 RPC 服务器。go run rpc_server.go我在client_test.go中的测试代码如下package package_nameimport (    "encoding/gob"    "log"    "net/rpc"    "strconv"    "testing")type BroadcastMessage struct {    Payload interface{}}func TestClient(t *testing.T) {    gob.Register(BroadcastMessage{})    args := &RPCMessageArgs{}    args.Info.NodeID = 3    args.Info.Payload = &BroadcastMessage{}    reply := &RPCMessageReply{}    client, err := rpc.Dial("tcp", ":800"+strconv.Itoa(1))    if err != nil {        log.Fatal("dialing: ", err)    }    err = client.Call("RPCServer.RemoteCall", args, reply)    if err != nil {        log.Fatal("call error: ", err)    }}我收到此错误call error: gob: name not registered for interface: "package_name.BroadcastMessage"
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

我犯了一个非常低级的错误。我在两个文件中定义了两个,一个在 中,一个在 .我应该在包中定义这些结构,然后让这两个文件调用这些结构。更改后,我的代码结构如下:type BroadcastMessagerpc_server.goclient_go.go


package_name/

    args/

        rpc_args.go

    server/

        rpc_server.go

    client_test.go

在 rpc_args.go 文件中定义相关结构,将 args 包导入其他文件中,然后调用命令 in 并正常运行。gob.Register()rpc_server.goclient_test.go


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 53 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信