首先,我具有以下结构:
type User struct {
Username string
Password string
FullName string
Mail string
}
我尝试创建以下功能:
func FromJson(emptyJsonAble interface{},jsonString string) interface{} {
err := json.Unmarshal([]byte(jsonString), &emptyJsonAble)
if err != nil {
panic(err)
}
return emptyJsonAble
}
我已经按照以下方式调用了该函数:
user := FromJson(User{}, str)
但是该函数返回以下映射而不是User struct:
地图[全名:a邮件:a密码:b用户名:a]
如何返回结构本身(无需每次都转换返回的对象)?
换句话说,给出时如何使函数将EmptyJsonAble视为用户类型。 我曾尝试使用reflect.Type,但被卡住了
答案 0 :(得分:1)
在传递User结构时,实际上是在传递值的副本,在这种情况下,您想要做的就是传递对该类型的指针引用。然后,因为您已经有了一个指针,所以不需要在函数内部传递引用:
user := FromJson(&User{}, str)
err := json.Unmarshal([]byte(jsonString), emptyJsonAble)
https://play.golang.org/p/uXMcFCl138y
更新:
同样,因为您现在正在通过引用传递,所以您无需返回未编组数据结构的副本:
https://play.golang.org/p/GJKqVJLbRCZ
在两种情况下,我们都可以看到结果相同,因此无需返回数据