我对 golang 和一般编译语言都很陌生,所以请原谅我的无知。在一些这样的代码中:package mainimport "fmt"func assign() int { return 1}func reference(foo *int) int { *foo = 2 return 0}func main() { var a, b int a = assign() reference(&b) fmt.Println(a) fmt.Println(b)}...将值分配给 a 与通过引用传递 b 之间的实际区别是什么?就实际代码而言,为什么 json.Unmarshal() 要求您将指针传递给空变量,而不是仅返回 Unmarshalled 值以便将其分配给变量?
1 回答
米脂
TA贡献1836条经验 获得超3个赞
按值传递需要复制参数,但是在引用的情况下,您只需将指针发送到对象。Golang 默认通过值传递,包括切片。
对于json.Unmarshal的具体问题,我相信原因是Unmarshal代码可以验证传入的对象是否包含与json中找到的兼容类型的相同字段名称。例如,如果 json 有一个重复的字段,则我们要解组的对象中需要有一个对应的切片。
因此,我们需要传入我们希望将 json 字符串解组到的结构。它需要是一个指针,以便 Unmarshal 可以填充字段。如果你只是传递一个通用接口,Unmarshal 将返回一个映射。如果 Unmarshal 不采用指向结构/接口的指针,它可以实现为始终返回映射,但我认为这种方式更有用。
这是一个简单的例子,但可能有用 - https://play.golang.org/p/-n8euepSS0
- 1 回答
- 0 关注
- 263 浏览
添加回答
举报
0/150
提交
取消
