先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
正文
- 基本问题:
big.Int
是Go语言中的一个结构体,用于表示大整数。虽然它在Go中的应用广泛且强大,但它并不是原生支持JSON序列化的。原因在于big.Int
内部的表示方法是针对高效数学运算优化的,而非JSON兼容性。- JSON是一种轻量级的数据交换格式,它的数值类型基于JavaScript的数值表示,这意味着它不能直接表示超出其精度范围的大整数。
- 为什么
big.Int
不可直接序列化:
- 在Go中,当使用
encoding/json
包进行序列化时,它会尝试将数据转换为JSON支持的基本类型:字符串,数字,布尔值,数组,和对象。由于big.Int
不符合这些基本类型中的任何一种,所以默认的序列化器不知道如何将其转换为JSON。 - 此外,
big.Int
存储结构复杂,包含多个私有字段,这些都不是公开可序列化的。
解决方案
- 手动序列化和反序列化:
- 序列化:在序列化
big.Int
时,可以先将其转换为字符串或十六进制表示,这些格式是JSON兼容的。例如,使用big.Int
的Text
方法可以得到它的十进制字符串表示,然后这个字符串可以被直接序列化为JSON。 - 反序列化:在反序列化时,从JSON中读取字符串,然后使用
big.Int
的SetString
方法将其解析回big.Int
对象。
- 自定义JSON Marshaller和Unmarshaller:
- 通过为
big.Int
类型实现json.Marshaler
和json.Unmarshaler
接口,可以控制big.Int
的JSON表示方式。这种方法的好处是它使得序列化和反序列化过程更加自动化和隐藏,使用者不需要手动在字符串和big.Int
之间转换。 - 实现这些接口需要定义
MarshalJSON()
和UnmarshalJSON()
方法,确保在这些方法中处理好big.Int
到字符串的转换和从字符串到big.Int
的转换。
- 使用第三方库:
- 有些第三方库提供了对
big.Int
更好的JSON支持,这些库可能已经实现了上述的自定义序列化和反序列化方法。在选择使用这些库之前,需要评估其性能、安全性以及与项目其他部分的兼容性。
结论
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**