学习C++20, 为Go的atomic类型插上一双翅膀

如果我们将Go语言的并发原语弄的滚瓜烂熟,那么我们使用组合的方式,创造出更高级的并发原语,针对一些特定的并发场景,可以提供更高效的并发原语。

这篇文章就是就是利用atomic中的并发原语和条件变量,组合出类似C++ 20规范中atomic类型的wait/notify_one/notify_all的功能。

阅读全文

Go标准库的新 math/rand

Go 1.22 就要在龙年春节期间发布了。Go 1.22的新特性包括了新的 math/rand 包。这个包的目标是提供一个更好的伪随机数生成器,它的 API 也更加简单易用。本文将介绍这个新的包的特性。

阅读全文

从Go channel中批量读取数据

有时候批量积攒一批数据集中处理,是一个高效的提高程序性能的方法,比如我们可以批量写入数据库,批量发送消息到kafka,批量写入网络数据等等。
批量把数据收集出来,我们常用channel类型,此时channel的功能就是一个buffer,多个生产者把数据写入到channel中,消费者从channel中读取数据,但是Go的channel并没有提供批量读取的方法,我们需要自己实现一个。

阅读全文

卷起来,老程序员也得了解errors包的新变化

Go 1.13 中errors包有了一些变化,这些变化是为了更好地支持Go的错误处理提案。Go 1.20中也增加了一个新方法,这个新方法可以代替第三方的库处理多个error,这篇文章将介绍这些变化。

因为原来的Go的errors中的内容非常的简单,可能会导致大家轻视这个包,对于新的变化不是那么的关注。让我们一一介绍这些新的方法。

阅读全文