dongqinta4174 2018-08-20 18:32
浏览 148
已采纳

golang json中的指针解组

I'm trying to unmarshal a web service response using the below command and it works fine.

bodyBytes, _ := ioutil.ReadAll(response.Body)
bodyString := string(bodyBytes)
err = json.Unmarshal([]byte(bodyString), &output)
fmt.Println(&output)

When I use the pointer variable '&output' it works fine ie; the outputs are displayed properly.

but when I try to use the variable directly without &(ampersand), the outputs do not look good.

bodyBytes, _ := ioutil.ReadAll(response.Body)
bodyString := string(bodyBytes)
err = json.Unmarshal([]byte(bodyString), output)
fmt.Println(output)

What is the difference between these 2 variable - pointer vs normal variable while unmarshalling?

var output core.ApiData

The output is a type struct to match the apidata output.

  • 写回答

2条回答 默认 最新

  • du4010 2018-08-20 18:36
    关注

    It is because the Unmarshal function takes the output struct and populates it with the data. If you do not pass a pointer, it will take a copy of your struct and fill it, after which you don't have access to it any more. If you pass a pointer, the output struct behind the pointer will be populated and remain available.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表