gpt4 book ai didi

Gob 解码器返回 EOF 错误

转载 作者:IT王子 更新时间:2023-10-29 02:23:44 25 4
gpt4 key购买 nike

我正在尝试实现一个基于接口(interface)的消息队列,其中将作业作为字节推送到 Redis 队列。但是我在尝试解码字节流时不断收到 EOF 错误。

https://play.golang.org/p/l9TBvcn9qg

有人能给我指出正确的方向吗?

谢谢!

最佳答案

在您的 Go Playground 示例中,您正在尝试对接口(interface)进行编码,而接口(interface)没有具体的实现。如果您从 A 结构中删除接口(interface),那应该可以工作。像下面这样:

package main

import "fmt"
import "encoding/gob"
import "bytes"

type testInterface interface{}

type A struct {
Name string
Interface *B // note this change here
}

type B struct {
Value string
}

func main() {
var err error
test := &A {
Name: "wut",
Interface: &B{Value: "BVALUE"},
}
buf := bytes.NewBuffer([]byte{})
enc := gob.NewEncoder(buf)
dec := gob.NewDecoder(buf)

// added error checking as per Mark's comment
err = enc.Encode(test)
if err != nil {
panic(err.Error())
}

result := &A{}
err := dec.Decode(result)
fmt.Printf("%+v\n", result)
fmt.Println("Error is:", err)
fmt.Println("Hello, playground")
}

此外,作为旁注,您将看到类似以下的输出:&{Name:wut Interface:0x1040a5a0} 因为 A 正在引用一个引用到 B 结构。进一步清理:

type A struct{
Name string
Interface B // no longer a pointer
}

func main() {
// ...
test := &A{Name: "wut", Interface: B{Value: "BVALUE"}}
// ...
}

关于Gob 解码器返回 EOF 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33073434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com