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

变量赋值和引用传递有什么区别?

变量赋值和引用传递有什么区别?

Go
慕容708150 2022-03-03 15:06:01
我对 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


查看完整回答
反对 回复 2022-03-03
  • 1 回答
  • 0 关注
  • 263 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号