簡體   English   中英

Gob解碼器返回EOF錯誤

[英]Gob Decoder Returning EOF Error

我正在嘗試實現基於接口的消息隊列,其中作業以字節為單位推送到Redis隊列。 但是嘗試解碼字節流時,我一直收到EOF錯誤。

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

有人可以指出我正確的方向嗎?

謝謝!

在您的Go Playground示例中,您嘗試對接口進行編碼,而接口沒有具體的實現。 如果您從A結構中刪除接口,那應該可以。 如下所示:

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.Register(B{})

https://play.golang.org/p/7rQDHvMhD7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM