您经常在Go代码中看到并发问题吗?

一篇简短的文章,其主要价值是评论(我希望如此)。

我最近刚转到Go。到目前为止,我已经注意到三个问题:

  • time.Ticker 不停:跳过的行 defer tick.Stop()

  • 关于库类型的评论说它“目前是安全的”,但没有确切说明如何调用方法或从中调用goroutines。可以将默认值视为“可以从任何位置以任何顺序在任何地方调用类型的任何方法”,但实际上大多数线程安全类型并非如此:它们要么具有一定的生命周期(开始-停止),要么语义仅支持一个编写器:变异只能从一个goroutine或同时从这两个goroutine调用方法。

  • 这一点与上一个相关,并且部分重叠:结构中有一个字段sync.Mutex,但是没有注释说明它所保护的内容,最重要的是为什么(例如,“应保护对这些字段的访问,因为它们是从这样的goroutine编写的,而从goroutine读取的net/http服务器”)。



    请注意,即使在golang / go源文件中(通常是不带注释的)(除了文档记录的源文件),子包中的所有互斥体net/都具有简短的注释。

对于使用Go Go进行写作的人们来说,这是一个问题-在审阅,研究旧代码或库代码时,您经常注意到哪些问题?



这篇文章是Reddit上一篇文章的跨帖子翻译




All Articles