Gob Decode Giving Ошибка "DecodeValue неназначаемого значения"
Я новичок в Go, и у меня возникли некоторые проблемы, когда я надеваю трубку. Я написал быстрый тест, который, как я думал, пройдет, но вызов декодирования возвращает ошибку "DecodeValue of asassignable 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)
}
Я подозреваю, что упускаю что-то глупое здесь и ценю любую помощь, которую вы можете предложить.
1 ответ
Если бы друг взглянул на это, он указал, что gob не позволяет назначать нулевой указатель. Из документации пакета gob: "Нулевые указатели недопустимы, так как они не имеют значения". Похоже, что gob отражает поля передаваемой структуры и пытается присвоить значения из закодированного потока. Меняем это:
var t2 *tester
К этому:
t2 := &tester{}
Делает тестовый проход.