猿问

golang json 解组中的指针

我正在尝试使用以下命令解组 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 输出的类型结构。


翻过高山走不出你
浏览 221回答 2
2回答

忽然笑

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

梦里花落0921

如您所见,json.Unmarshal它不返回值,因此如果您传递一个值而不是指针,它将无法正常工作,因为它会填充它作为参数的接口副本。它的工作方式是将指针传递给要填充的结构,然后json.Unmarshal使用指针直接填充它。有关详细信息,请参阅文档。Unmarshal 解析 JSON 编码的数据并将结果存储在v 指向的值中。如果 v 为 nil 或不是指针,则 Unmarshal 返回 InvalidUnmarshalError。
随时随地看视频慕课网APP

相关分类

Go
我要回答