我对golang很新,并且编译语言一般,所以请原谅我的无知。在某些代码中:
package main
import "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值,以便将它分配给您的变量?
答案 0 :(得分:0)
按值传递需要复制参数,但是在引用的情况下,只需将指针发送到对象即可。 Golang默认传递值,包括切片。
关于json.Unmarshal的具体问题,我认为原因是Unmarshal代码可以验证传入的对象是否包含与json中找到的兼容类型相同的字段名称。例如,如果json有一个重复的字段,那么我们要解组的对象中需要有一个对应的切片。
因此,我们需要传入我们希望json字符串解组的结构。它需要是一个指针,以便Unmarshal可以填充字段。如果您只是传递通用接口,Unmarshal将返回一个地图。如果Unmarshal没有指向结构/接口的指针,它可能已被实现为总是返回一个地图,但我认为这样更有用。
这是一个简单的例子,但可能有用 - https://play.golang.org/p/-n8euepSS0