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

golang json 解组中的指针

golang json 解组中的指针

Go
翻过高山走不出你 2023-03-21 16:53:08
我正在尝试使用以下命令解组 Web 服务响应并且它工作正常。bodyBytes, _ := ioutil.ReadAll(response.Body)bodyString := string(bodyBytes)err = json.Unmarshal([]byte(bodyString), &output)fmt.Println(&output)当我使用指针变量 '&output' 时,它工作正常,即;输出显示正确。但是当我尝试在不使用 &(&符号)的情况下直接使用变量时,输出看起来不太好。bodyBytes, _ := ioutil.ReadAll(response.Body)bodyString := string(bodyBytes)err = json.Unmarshal([]byte(bodyString), output)fmt.Println(output)这两个变量之间有什么区别 - 解组时指针与普通变量?var output core.ApiData输出是匹配 apidata 输出的类型结构。
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

这是因为该Unmarshal函数采用output结构并用数据填充它。如果您不传递指针,它将获取您的结构的副本并填充它,之后您将无法再访问它。如果你传递一个指针,output指针后面的结构将被填充并保持可用。



查看完整回答
反对 回复 2023-03-21
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

如您所见,json.Unmarshal它不返回值,因此如果您传递一个值而不是指针,它将无法正常工作,因为它会填充它作为参数的接口副本。

它的工作方式是将指针传递给要填充的结构,然后json.Unmarshal使用指针直接填充它。

有关详细信息,请参阅文档。

Unmarshal 解析 JSON 编码的数据并将结果存储在v 指向的值中。如果 v 为 nil 或不是指针,则 Unmarshal 返回 InvalidUnmarshalError。


查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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