有时候批量积攒一批数据集中处理,是一个高效的提高程序性能的方法,比如我们可以批量写入数据库,批量发送消息到kafka,批量写入网络数据等等。
批量把数据收集出来,我们常用channel类型,此时channel的功能就是一个buffer,多个生产者把数据写入到channel中,消费者从channel中读取数据,但是Go的channel并没有提供批量读取的方法,我们需要自己实现一个。
“鲜有人了解的同步原语Phaser,和Barrier有啥区别?”
Java中的Phaser是一个同步原语,它可以让多个线程在某个时刻同步执行。它和Barrier有点类似,但是它比Barrier更加灵活。
每个Go程序员必犯之错
说起每个程序员必犯的错误,那还得是"循环变量"这个错误了,就连Go的开发者都犯过这个错误,这个错误在Go的FAQ中也有提到What happens with closures running as goroutines?:
2023年在地球上举行的Gopher大会
疫情结束后,很多的Gopher大会在全世界举行,本文整理了今年在地球上举行的Gopher大会,并列出了大会中一些有趣的议题和油管链接。
卷起来,老程序员也得了解errors包的新变化
Go 1.13 中errors包有了一些变化,这些变化是为了更好地支持Go的错误处理提案。Go 1.20中也增加了一个新方法,这个新方法可以代替第三方的库处理多个error,这篇文章将介绍这些变化。
因为原来的Go的errors中的内容非常的简单,可能会导致大家轻视这个包,对于新的变化不是那么的关注。让我们一一介绍这些新的方法。
Go单线程运行也会有并发问题
一个Go大佬群中严肃的讨论了一个问题:Go程序单线程多goroutine访问一个map会遇到并发读写panic么?
这个限流库两个大bug存在了半年之久,没人发现?
最近我的同事在使用uber-go/ratelimit这个限流库的时候,遇到了两个大bug。这两个bug都是在这个库的最新版本(v0.3.0
)中存在的,而这个版本从7月初发布都已经过半年了,都没人提bug,难道大家都没遇到过么?
2023年 Go 并发库的变化综述
2023年来, Go的并发库又有了一些变化,这篇文章是对这些变换的综述。小细节的变化,比如typo、文档变化等无关大局的变化就不介绍了。