美文网首页
GO中的Unmarshal 01

GO中的Unmarshal 01

作者: 木工007 | 来源:发表于2020-03-20 20:35 被阅读0次

问题

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

message := new(Message)

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

    return

}

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

验证

先写几个demo看下吧

验证Unmarshal01

输出结果:

验证结果

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

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

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

总结

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

相关文章

网友评论

      本文标题:GO中的Unmarshal 01

      本文链接:https://www.haomeiwen.com/subject/agssyhtx.html