我的代碼組織結構是這樣的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 關注
- 71 瀏覽
添加回答
舉報
0/150
提交
取消