猿问

使用Gob解码和编码接口{}

我正在尝试对包含Interface {}作为字段的结构进行解编码。


这里的问题是,编码工作正常,但是如果我尝试将数据解码data为值get { <nil>},


如果更改Data interface{}为Data substring,它实际上可以工作,但这对我来说不是解决方案,因为我想将查询结果缓存到数据库中,该数据库的类型取决于查询。(例如Users或Cookies)


最小的工作实例

来源

http://play.golang.org/p/aX7MIfqrWl


package main


import (

    "bytes"

    "encoding/gob"

    "fmt"

)


type Data struct {

    Name string

    Data interface{}

}


type SubType struct {

    Foo string

}


func main() {

    // Encode

    encodeData := Data{

        Name: "FooBar",

        Data: SubType{Foo: "Test"},

    }

    mCache := new(bytes.Buffer)

    encCache := gob.NewEncoder(mCache)

    encCache.Encode(encodeData)


    fmt.Printf("Encoded: ")

    fmt.Println(mCache.Bytes())


    // Decode

    var data Data

    pCache := bytes.NewBuffer(mCache.Bytes())

    decCache := gob.NewDecoder(pCache)

    decCache.Decode(&data)


    fmt.Printf("Decoded: ")

    fmt.Println(data)

}

产出

预期产量

编码:[37255129 3 1 1 4 68 97 116 97 1 255 130 0 1 2 1 4 78 97 109 101 1 12 0 1 4 68 97 116 97 1 255 132 0 0 0 0 29 255 131 3 1 1 7 83117 98 84 121 112 101 1 255 132 0 1 1 1 3 70 111 111 1 12 0 0 0 19 255 130 1 6 70 111 111 66 97 114 1 1 4 84 101 115 116 0 0]


解码:{FooBar {测试}}


当前结果

编码:[37255129 3 1 1 4 68 97 116 97 1 255 130 0 1 2 1 4 78 97 109 101 1 12 0 1 4 68 97 116 97 1 255 132 0 0 0 0 29 255 131 3 1 1 7 83117 98 84 121 112 101 1 255 132 0 1 1 1 3 70 111 111 1 12 0 0 0 19 255 130 1 6 70 111 111 66 97 114 1 1 4 84 101 115 116 0 0]


解码后:{}


牛魔王的故事
浏览 274回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答