gpt4 book ai didi

go - 使用gob解码rpc回复的错误

转载 作者:行者123 更新时间:2023-12-03 10:09:07 25 4
gpt4 key购买 nike

问题:在rpc调用后,如果结构的字段为零,则结构字段不会被替换为新值。
这是最小的代码示例:

package main

import (
"fmt"
"log"
"net"
"net/rpc"
)

type RpcObject int
type Reply struct {
A int
}

func (*RpcObject) GetSlice(req int, reply *[]Reply) error {
*reply = []Reply{{0}, {158}}
return nil
}

func Serve() {
addr, err := net.ResolveTCPAddr("tcp", "0.0.0.0:12345")
if err != nil {
log.Fatal(err)
}
inbound, err := net.ListenTCP("tcp", addr)
if err != nil {
log.Fatal(err)
}
handler := new(RpcObject)
rpc.Register(handler)
rpc.Accept(inbound)
}
func main() {
go Serve()
var err error
var client *rpc.Client
for client, err = rpc.Dial("tcp", "localhost:12345"); err != nil; client, err = rpc.Dial("tcp", "localhost:12345") {
fmt.Println("connecting...")
}
reply := []Reply{{225}, {9946}}
client.Call("RpcObject.GetSlice", 0, &reply)
fmt.Println(reply)
}
输出:
[{225} {158}]
我认为这是gob格式的问题,但是我不确定。有人知道如何解决这个问题吗?

最佳答案

该应用程序产生了预期的结果。 gob编码器不传输回复 slice 中的第一个元素,因为该元素为零值。解码器未在main的reply slice中设置第一个元素,因为未收到该元素的值。
如果您不想为答复中缺少的值设置默认值,请解码为零值:

...
var reply []Reply
client.Call("RpcObject.GetSlice", 0, &reply)
...

关于go - 使用gob解码rpc回复的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com