gpt4 book ai didi

Gob 解码给出 "DecodeValue of unassignable value"错误

转载 作者:IT王子 更新时间:2023-10-29 01:38:30 27 4
gpt4 key购买 nike

我是 Go 的新手,我在将 gob 放在电线上时遇到了一些麻烦。我写了一个我认为会通过的快速测试,但是解码调用返回了“DecodeValue of unassignable value”错误。这是代码:

type tester struct {
Payload string
}

func newTester(payload string) *tester {
return &tester {
Payload: payload,
}
}

func TestEncodeDecodeMessage(t *testing.T) {
uri := "localhost:9090"
s := "the lunatics are in my head"
t1 := newTester(s)
go func(){
ln, err := net.Listen("tcp", uri)
assert.NoError(t, err)
conn, err := ln.Accept()
assert.NoError(t, err)

var t2 *tester
decoder := gob.NewDecoder(conn)
err = decoder.Decode(t2)
assert.NoError(t, err)
conn.Close()
assert.NotNil(t, t2)
}()

time.Sleep(time.Millisecond * 100)
conn, err := net.Dial("tcp", uri)
assert.NoError(t, err)

gob.Register(t1)
encoder := gob.NewEncoder(conn)
err = encoder.Encode(t1)
assert.NoError(t, err)
conn.Close()
time.Sleep(time.Millisecond * 100)
}

我怀疑我在这里遗漏了一些愚蠢的东西,感谢您提供的任何帮助。

最佳答案

有一个 friend 看过这个,他指出 gob 不允许你分配给一个 nil 指针。来自 gob 包 docs :“不允许使用 Nil 指针,因为它们没有值(value)。”看起来 gob 反射(reflect)了传入的结构的字段,并尝试从编码流中分配值。改变这个:

var t2 *tester

对此:

t2 := &tester{}

使测试通过。

关于Gob 解码给出 "DecodeValue of unassignable value"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46671636/

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