我想創建一個結構的新實例,在運行時使用它的類型(reflect.TypeOf)。我已在StackOverflow How do you create a new instance of a struct from it's Type at runtime in Go?上跟隨此線程。下面是我的實現(也是在http://play.golang.org/p/BtX0d5Ytu8):GO運行時類型結構的新實例
package main
import (
"fmt"
"reflect"
"encoding/json"
"bytes"
)
type UserInfo struct {
Email string `json:"email"`
FullName string `json:"name"`
ID string `json:"_id"`
}
func main() {
fmt.Println("Hello, playground")
db := DBEngine{}
db.DB = make(map[string][]byte)
db.Register(UserInfo{})
db.Put("142321", UserInfo{"[email protected]", "John Doe", "142321"})
ret := db.Get("142321")
fmt.Println("TypeOf(ret):", reflect.TypeOf(ret))
fmt.Println("ValueOf(ret):", reflect.ValueOf(ret))
fmt.Println("Value:", ret)
}
type DBEngine struct {
Template interface{}
DB map[string][]byte
}
func (db *DBEngine) Register(v interface{}) {
db.Template = v
}
//Set User defined object
func (db *DBEngine) Put(key string, v interface{}) {
res, _ := json.Marshal(v)
db.DB[key] = res
}
//Return user defined object
func (db *DBEngine) Get(key string) interface{} {
decoder := json.NewDecoder(bytes.NewReader(db.DB[key]));
fmt.Println("Value []byte:", string(db.DB[key]))
ret := reflect.New(reflect.TypeOf(db.Template)).Elem()
fmt.Println(reflect.TypeOf(db.Template), ret)
decoder.Decode(ret)
return ret.Interface()
}
出於某種原因,我總是空的結構。我無法設置字段或修改。有人可以建議什麼是錯的?
【如何初始化只給出一個接口樣本對象的列表?(HTTPS的可能重複://計算器。 com/questions/32916619/how-to-initialize-a-list-of-objects-given-only-an-interface-sample) – kenfire