【发布时间】:2023-02-06 07:21:25
【问题描述】:
我最近开始用 Go 重写我的一些 Python 服务以加快它们的速度,并看到了 gin 文档的这一部分: https://github.com/gin-gonic/gin#goroutines-inside-a-middleware
所以我理解说明,但我试图理解为什么?制作副本的意义是什么,如果我不为处理程序中的 goroutines 制作上下文副本,会引入什么问题?
【问题讨论】:
-
检查代码,
copy并没有包含原始上下文的所有值,而只是一些。乍一看,例如Lock未被复制,响应作者被替换为copy。两者都是有道理的,因为 go 例程可以随时完成,即使在处理和回答请求之后很久。原回复writer可能已经关闭,原lock已经解锁。或者相反,go 例程可能会提前完成,过早解锁lock或关闭响应编写器。其他跳过的字段可能会出现类似的问题。