2014-07-01 39 views
1

我有golang gob編碼的問題。當我使用struct編碼接口時出現錯誤。golang - 採空區編碼界面錯誤

我的代碼:

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

回答

4

您需要register你的接口事先:

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