drurhg37071 2014-07-01 10:31
浏览 96
已采纳

golang-gob编码接口错误

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

  • 写回答

1条回答 默认 最新

  • dongzhong8691 2014-07-01 10:40
    关注

    You need to register your interface beforehand:

    gob.Register(user)
    enc = gob.NewEncoder(m)
    err = enc.Encode(data)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?