【发布时间】:2021-07-13 09:15:59
【问题描述】:
我编写了一个 API,它可以进行 DB 调用并执行一些业务逻辑。我正在调用一个必须在后台执行某些操作的 goroutine。 由于 API 调用不应等待此后台任务完成,因此我在调用 goroutine 后立即返回 200 OK(假设后台任务永远不会出错。)
我读到 goroutine 将在 goroutine 完成其任务后终止。 这种“一劳永逸”的方式对 goroutine 泄漏安全吗? goroutine 在执行任务后是否会被终止并清理?
func DefaultHandler(w http.ResponseWriter, r *http.Request) {
// Some DB calls
// Some business logics
go func() {
// some Task taking 5 sec
}()
w.WriteHeader(http.StatusOK)
}
【问题讨论】:
-
“这种火灾和遗忘方式对 goroutine 泄漏安全吗?” -- 如果你知道你的 goroutine 将退出(或者你不希望它退出)。例如,只有当您的 goroutine 陷入意外的无限循环时,才会发生“泄漏”。
标签: go goroutine fire-and-forget