为了账号安全,请及时绑定邮箱和手机立即绑定

如何将未编组的 Golang 对象转换为指定变量的类型

如何将未编组的 Golang 对象转换为指定变量的类型

Go
肥皂起泡泡 2021-08-23 17:46:23
我想将各种对象编组到文件中,然后解组它们,并通过获取编组的变量的类型将它们转换回原始类型。关键是我想将未编组的对象转换为指定变量的类型,而不指定类型。简短的伪代码:// Marshal thisitem := Book{"The Myth of Sisyphus", "Albert Camus"}// Then unmarshal and convert to the type of the item variable.itemType := reflect.TypeOf(item)newItem itemType = unmarshalledItem.(itemType)  // This is the problem.fmt.Println("Unmarshalled is:", reflect.TypeOf(newItem)) // Should print *main.Book完整代码:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os"    "reflect")type Book struct {    Title  string    Author string}func main() {    // Create objects to marshal.    book := Book{"The Myth of Sisyphus", "Albert Camus"}    box := make(map[string]interface{})    box["The Myth of Sisyphus"] = &book    itemType := reflect.TypeOf(box["The Myth of Sisyphus"])    fmt.Println("Book is:", itemType)    // Marshal objects to file.    err := Write(&book)    if err != nil {        fmt.Println("Unable to save store.", err)        return    }    // Unmarshal objects from file.    untyped := make(map[string]interface{})    bytes, err := ioutil.ReadFile("store.txt")    if err != nil {        fmt.Println("Unable to load store.", err)        return    }    err = json.Unmarshal(bytes, &untyped)    if err != nil {        fmt.Println("Err in store unmarshal.", err)        return    }    // Get Title property of unmarshalled object,    // and use that to get variable type from box map.    for k, v := range untyped {        if k == "Title" {            itemTitle := v.(string)            fmt.Println("Cast item having title:", itemTitle)            targetType := reflect.TypeOf(box[itemTitle])            fmt.Println("Type to cast to is:", targetType)            // Convert untyped to targetType.            // This is the problem.            typed targetType = untyped.(targetType)            fmt.Println("Unmarshalled is:", reflect.TypeOf(typed)) // Should print *main.Book        }    }}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信