我的代码组织结构是这样的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
- 1 回答
- 0 关注
- 53 浏览
添加回答
举报
0/150
提交
取消