英文:
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)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论