Golang将gob字符串转换为接口

问题描述 投票:2回答:1

我正在做一个go程序,我需要把一个gob写到一个文件中。我使用了.String()方法将gob转换成一个字符串。

var network bytes.Buffer
encoder := gob.NewEncoder(&network)

_ = encoder.Encode(valueToEncode)

gobString := network.String()

然后我将把gob写到一个文件中,稍后我将检索它并把它发送给这个程序。

var filebytes = []byte(file)  //i think that these two lines are the issue
network := bytes.NewBuffer(filebytes)

decoder := gob.NewDecoder(network)

var decoded interface{}

_ := decoder.Decode(&decoded)

但是当我运行这个程序的时候,它给了我这个错误:

gob: encoded unsigned integer out of range(编码无符号整数超出范围)

我认为问题出在解码程序的前两行。那么我应该放什么才能正确解码gob呢?

EDIT:我想要的是gobString的.UnString()方法。我怎样才能实现呢?

go decoding gob
1个回答
2
投票

encoding/gob 从围棋值生成二进制数据。其结果不是用于文本表示,所以你不应该把它当作一个 string但作为一系列的字节,如 []byte.

也就是说,不要使用 Buffer.String() 而是 Buffer.Bytes() 如果你必须获得编码后的数据。

下面是一个编码和解码的例子。string 值,使用 encoding/gob:

// ENCODE
var network bytes.Buffer
encoder := gob.NewEncoder(&network)

valueToEncode := "Hello, 世界"
if err := encoder.Encode(valueToEncode); err != nil {
    panic(err)
}

gobData := network.Bytes() // Save / serialize this byte slice

// DECODE
network2 := bytes.NewBuffer(gobData)
decoder := gob.NewDecoder(network2)

var decoded string
if err := decoder.Decode(&decoded); err != nil {
    panic(err)
}
fmt.PrintTln(decoded)

輸出 (試試看) 去游乐场):

Hello, 世界

还需要注意的是,如果你想把编码后的数据写入网络连接或文件中,你就不需要... bytes.Buffer你可以直接编码到这些。如果你必须使用 bytes.Buffer,您也可以使用它的 Buffer.WriteTo() 方法,将其内容写入一个 io.Writer (如文件或网络连接)。

© www.soinside.com 2019 - 2024. All rights reserved.