英文:
golang - gob encode interface error
问题
我遇到了golang gob编码的问题。当我使用结构体对接口进行编码时,出现了错误。
我的代码如下:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
type Data struct {
Id int
D interface{}
}
type User struct {
Name string
Age int
}
func main() {
// 正常工作-----------
data := Data{
Id: 99,
D: []int{1, 2, 3},
}
m := new(bytes.Buffer)
enc := gob.NewEncoder(m)
err := enc.Encode(data)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(m)
//-------------------
// 错误 -------------
user := User{
Name: "Lei",
Age: 25,
}
data = Data{
Id: 100,
D: user,
}
m = new(bytes.Buffer)
enc = gob.NewEncoder(m)
err = enc.Encode(data)
//err - gob: type not registered for interface: main.User
if err != nil {
fmt.Println(err)
return
}
fmt.Println(m)
}
你可以在这里查看代码:http://play.golang.org/p/amhhQjsIjt
请问有什么我可以帮助你的吗?
英文:
I have problem with golang gob encode. there is a error when i encode interface with struct.
my code:
package main
import (
"bytes"
"encoding/gob"
"fmt"
)
type Data struct {
Id int
D interface{}
}
type User struct {
Name string
Age int
}
func main() {
//work well-----------
data := Data{
Id:99,
D: []int{1,2,3},
}
m := new(bytes.Buffer)
enc := gob.NewEncoder(m)
err := enc.Encode(data)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(m)
//-------------------
//error -------------
user := User{
Name: "Lei",
Age: 25,
}
data = Data{
Id: 100,
D: user,
}
m = new(bytes.Buffer)
enc = gob.NewEncoder(m)
err = enc.Encode(data)
//err - gob: type not registered for interface: main.User
if err != nil {
fmt.Println(err)
return
}
fmt.Println(m)
}
答案1
得分: 4
你需要事先注册你的接口:
gob.Register(user)
enc = gob.NewEncoder(m)
err = enc.Encode(data)
英文:
You need to register your interface beforehand:
gob.Register(user)
enc = gob.NewEncoder(m)
err = enc.Encode(data)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论