gpt4 book ai didi

reflection - GO 中运行时类型的新结构实例

转载 作者:IT王子 更新时间:2023-10-29 01:59:14 26 4
gpt4 key购买 nike

我正在尝试创建结构的新实例,在运行时使用它的类型 (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 ):

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{"jdoe@acme.com", "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()
}

出于某种原因,我总是得到空结构。我无法设置字段或修改。有人可以提出什么问题吗?

最佳答案

我检查了你的代码。当你用 reflect 新建一个类型时,你在 Value 类型中得到了一个值,需要调用 Interface() 来获取新生成值的接口(interface)

检查代码 http://play.golang.org/p/CHWSV8EG7D

关于reflection - GO 中运行时类型的新结构实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33469177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com