一篇简短的文章,其主要价值是评论(我希望如此)。
我最近刚转到Go。到目前为止,我已经注意到三个问题:
time.Ticker
不停:跳过的行defer tick.Stop()
关于库类型的评论说它“目前是安全的”,但没有确切说明如何调用方法或从中调用goroutines。可以将默认值视为“可以从任何位置以任何顺序在任何地方调用类型的任何方法”,但实际上大多数线程安全类型并非如此:它们要么具有一定的生命周期(开始-停止),要么语义仅支持一个编写器:变异只能从一个goroutine或同时从这两个goroutine调用方法。
这一点与上一个相关,并且部分重叠:结构中有一个字段
sync.Mutex
,但是没有注释说明它所保护的内容,最重要的是为什么(例如,“应保护对这些字段的访问,因为它们是从这样的goroutine编写的,而从goroutine读取的net/http
服务器”)。
请注意,即使在golang / go源文件中(通常是不带注释的)(除了文档记录的源文件),子包中的所有互斥体net/
都具有简短的注释。
对于使用Go Go进行写作的人们来说,这是一个问题-在审阅,研究旧代码或库代码时,您经常注意到哪些问题?
这篇文章是Reddit上一篇文章的跨帖子翻译。