我的代碼組織結(jié)構(gòu)是這樣的package_name/ server/ rpc_server.go client_test.go我注冊一個(gè) RPC 服務(wù)器以接收來自其他節(jié)點(diǎn)的消息。type RPCMessageArgs struct { Operation string Info Message}type Message struct { NodeID uint64 Payload interface{}}func init() { gob.Register(BroadcastMessage{})}func main() { // start rpc server}我使用命令 啟動(dòng)服務(wù)器文件夾中的 RPC 服務(wù)器。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) }}我收到此錯(cuò)誤call error: gob: name not registered for interface: "package_name.BroadcastMessage"
1 回答
HUWWW
TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
我犯了一個(gè)非常低級(jí)的錯(cuò)誤。我在兩個(gè)文件中定義了兩個(gè),一個(gè)在 中,一個(gè)在 .我應(yīng)該在包中定義這些結(jié)構(gòu),然后讓這兩個(gè)文件調(diào)用這些結(jié)構(gòu)。更改后,我的代碼結(jié)構(gòu)如下:type BroadcastMessagerpc_server.goclient_go.go
package_name/
args/
rpc_args.go
server/
rpc_server.go
client_test.go
在 rpc_args.go 文件中定義相關(guān)結(jié)構(gòu),將 args 包導(dǎo)入其他文件中,然后調(diào)用命令 in 并正常運(yùn)行。gob.Register()rpc_server.goclient_test.go
- 1 回答
- 0 關(guān)注
- 79 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
