通过参考分配

问题描述

在Go中,我因参考问题而无法完成一项小任务。我试图在下面的代码中模拟该问题。

package main

import (
    "encoding/json"
    "fmt"
)

type tRes struct {
    a string
    b interface{}
}

func get(t string,r interface{}) error {
    var res tRes
    switch t {
    case "string":
        res = tRes{
            a: "XYZ",b: "Nobody",}
    case "int":
        res = tRes{
            a: "XYZ",b: 10,}
    }
    // r = &res.b
    j,_ := json.Marshal(res.b)
    json.Unmarshal(j,&r)
    return nil
}

func main() {
    var b string
    get("string",&b)
    fmt.Println(b)
    
    var i int
    get("int",&i)
    fmt.Println(i)
}

在代码中,get方法根据类型返回一个值。如果我使用r = &res.b则无效,而j,_ := json.Marshal(res.b) json.Unmarshal(j,&r)则有效。我不想像实际代码中那样在一个非常大的对象上进行JSON编组和解组,我正在调用一个返回大对象的API。我做json unmarshal来创建主对象,然后将一个子对象(定义为interface {})分配给响应(可能是不同类型)作为对我不起作用的引用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)