GO中的Unmarshal 01

问题

之前总想着总结下Unmarshal的源码流程,但一直被懒惰和忙碌拖着。今天看同事代码发现一个奇怪的代码:

message := new(Message)

if err = json.Unmarshal(messageBody, &message); err != nil {

    return

}

惊呆之余,我又开始怀疑自己是不是没注意这中用法。随即翻开go源码开始疯狂搜索。。。(疑惑中)

验证

先写几个demo看下吧

验证Unmarshal01

输出结果:

验证结果

从结果看不论是传入指针还是传入变量指针的指针,甚至三重指针都不妨碍解析。

想了解为何强类型语言go怎么允许这种操作呢?看源码吧


终于看明白了。解析指针是没有意义的,它会追溯到可以最终存储的数据类型变量才结束。所以多重指针也是找最终的非指针类型变量。

总结

json中的unmarshal使用很多用法及“陷阱”,之前开发遇到了很多问题来不及记录。后续有时间好好总结下unmarshal.



更多精彩内容详见作者公众号:  i技术之路

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容