Gob解码给出“DecodeValue of unassignable value”错误
问题描述:
我是新手,我在将电线放在电线上时遇到了一些麻烦。我写了一个我认为会通过的快速测试,但解码调用返回了“DecodeValue of unassignable value”错误。这里的代码: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)
}
我怀疑我在这里失去了一些愚蠢的东西,并感谢您能够提供任何帮助。
答
有一位朋友看看这个,他指出gob不会让你指定一个零指针。从gob包docs:“无指针是不允许的,因为它们没有价值。”它看起来像gob反映了传入的结构的字段,并试图从编码流中分配值。更改此:
var t2 *tester
要这样:
t2 := &tester{}
使测试通过。