-
Go随机数操作
在Go中,"math/rand"包实现了伪随机数生成器,在Go的1.22版本,官方库中在保持"math/rand"包更新的基础上新增了"math/rand/v2"包主要变更点在于性能优化(算法重写)、规范和统一、新的随机生成器和实现补充等在"math/rand/v2"包中几乎将所有函数进行了重新命名,并且新增了很多更强的随机算法,以至于该包并不向前兼容本文我们将学习最新的"math/rand/v2"包type Source表示一个生成均匀分布在范围[0, 1<<64)的int64的伪随机资源Source对于并发使用是不安全的 type Source interface { ...
2024-08-05 -
Go中的协程同步
由于go天然对并发的支持使得go在一些并发任务处理时表现优异,但是并发会存在临界资源问题,当多个协程来访问共享资源时资源是不安全的在一般场景中为了解决这个临界资源问题,可以使用channel通道来解决,但是当协程结构比较复杂时处理比较复杂易出错Go的官方sync包实现了传统编程语言中的“锁”,通过一个“锁”将共享资源锁住,防止其它协程的访问,以此来解决临界资源问题type Once表示只执行一次动作的对象 func (o *Once) Do(f func()) Do方法当且仅当第一次被调用时才执行指定函数,即使每次调用提供的f值不同 f没有参数和返回值 只有f返回后Do方法才会返回,如...
2024-08-05 -
Go中base64和hex的编码解码
base64Go官方库中encoding/base64包实现了base64的相关编码解码操作常量 var StdPadding = '=' var NoPadding = -1 var StdEncoding = NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/") RFC4648定义的标准base64编码字符集,使用"="末尾填充 RawStdEncoding :不使用末尾填充 相当于StdEncoding.WithPadding(NoPadding) var...
2024-07-19 -
Go的json序列化
Go的官方encoding/json包实现了常用的json序列化功能包级函数Compact(dst *bytes.Buffer, src []byte) error :将json编码的src中无用的空白字符剔除后写入dstHTMLEscape(dst *bytes.Buffer, src []byte)将json编码的src中的<、>、&、U+2028 和U+2029字符替换为\u003c、\u003e、\u0026、\u2028、\u2029 以便json编码可以安全的嵌入HTML的<script>标签里 因为历史原因,浏览器不支持在<scrip...
2024-07-19 -
Go中的结构体标签
在Go中,结构体被用来将多个信息聚合在一个单元中,这些信息集合被用来描述更高层次的概念在定义字段时除了字段名和类型外,还可以有一个可选的使用反引号字面量定义的字符串,称之为结构体标签(tag)或结构体字段标签(tag)结构体标签仅仅是作为一个结构体的字段信息描述,或者说是一个字段的注释信息,在程序运行时不会产生任何作用和功能 type User struct { Name string `any str` Password string `any str` Age int `any str` } 标签的内容和格式可以随意编写 ...
2024-07-19