2017-10-10 8 views
0

私は新しくなっていますが、何か問題がありました。私は渡すと思ったクイックテストを書いたが、デコードコールは "Unassignable valueのDecodeValue"エラーを返す。ここでは、コードです:ゴブのデコード「デコード値が割り当てられない」エラー

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

友人がこれを見て、彼はあなたが無ポインタに割り当てることはできないと指摘しました。ゴブパッケージdocsから: "無価値ポインタは許されません。値がないからです。"渡された構造体のフィールドにゴブが反映され、エンコードされたストリームから値を割り当てようとしているようです。この変更:これに

var t2 *tester 

t2 := &tester{} 

は、テストパスにします。

関連する問題