Golang 将 gob 字符串转换为接口
Golang convert gob string to interface
我正在编写一个 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?
编辑:
我想要的是 gobString 的 .UnString() 方法。我怎样才能做到这一点?
encoding/gob
从 Go 值生成二进制数据。结果不是用于文本表示,因此您不应将其视为 string
,而应将其视为一系列字节,例如[]byte
.
也就是说,如果您必须获取编码数据,请不要使用Buffer.String()
but rather Buffer.Bytes()
。
这是使用 encoding/gob
对 string
值进行编码和解码的示例:
// 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)
输出(在 Go Playground 上尝试):
Hello, 世界
另请注意,如果您打算将编码后的数据写入网络连接或文件中,则不需要bytes.Buffer
,您可以直接对它们进行编码。如果您必须使用bytes.Buffer
,您也可以使用其Buffer.WriteTo()
method to write its contents into an io.Writer
(例如文件或网络连接)。
我正在编写一个 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?
编辑: 我想要的是 gobString 的 .UnString() 方法。我怎样才能做到这一点?
encoding/gob
从 Go 值生成二进制数据。结果不是用于文本表示,因此您不应将其视为 string
,而应将其视为一系列字节,例如[]byte
.
也就是说,如果您必须获取编码数据,请不要使用Buffer.String()
but rather Buffer.Bytes()
。
这是使用 encoding/gob
对 string
值进行编码和解码的示例:
// 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)
输出(在 Go Playground 上尝试):
Hello, 世界
另请注意,如果您打算将编码后的数据写入网络连接或文件中,则不需要bytes.Buffer
,您可以直接对它们进行编码。如果您必须使用bytes.Buffer
,您也可以使用其Buffer.WriteTo()
method to write its contents into an io.Writer
(例如文件或网络连接)。