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{}

Делает тестовый проход.

Другие вопросы по тегам