简体   繁体   中英

golang - gob encode interface error

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)


}

http://play.golang.org/p/amhhQjsIjt

You need to register your interface beforehand:

gob.Register(user)
enc = gob.NewEncoder(m)
err = enc.Encode(data)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM