当前取消 运行 function/goroutine

Cancel currently running function/goroutine

我正在使用 gin-gonic 作为 HTTP 处理程序。我想在我的用户发出 POST 请求后预呈现一些图形资源。为此,我放置了一个中间件,将函数(内部带有计时器)分配给 map[string]func() 并在分配后直接调用此函数。

问题是,当用户发出两个后续请求时,该函数被调用了两次。

有没有什么方法可以像 Javascript 中的 clearIntervalclearTimeout 那样清除函数 ref and/or 他当前 运行 的调用?

谢谢

我想你的渲染函数正在调用一个库,所以你无法控制花费大部分时间的代码。如果你确实有这样的控制权,只需将一个通道传递给 goroutine,定期检查通道是否关闭,如果发生这种情况,只需从 goroutine return

但实际上我会推荐一个不同的、更简单的解决方案:跟踪(在 map 中)当前正在处理的文件的文件名(或散列),并检查该映射在启动第二个之前。

否;无论您计划 运行 作为 goroutine 的任何功能都需要 return 或调用 runtime.Goexit.

如果您正在寻找一种在您的 worker 中构建取消的方法,Go 提供了一个原语来处理它,它已经是任何 HTTP 请求的一部分 - 上下文。查看 Go 博客中的这些文章:

Concurrency Patterns: Context

Pipelines and cancellation