为了账号安全,请及时绑定邮箱和手机立即绑定

在 http 处理程序中执行 Goroutine

在 http 处理程序中执行 Goroutine

Go
呼唤远方 2021-10-18 15:12:23
如果我在 http 处理程序中启动一个 goroutine,它是否会在返回响应后完成?这是一个示例代码:package mainimport (    "fmt"    "net/http"    "time")func worker() {    fmt.Println("worker started")    time.Sleep(time.Second * 10)    fmt.Println("worker completed")}func HomeHandler(w http.ResponseWriter, r *http.Request) {    go worker()    w.Write([]byte("Hello, World!"))}func main() {    http.HandleFunc("/home", HomeHandler)    http.ListenAndServe(":8081", nil)}在上面的例子中,workergoroutine 会在所有情况下都完成吗?或者有什么特殊情况不会完成?
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

是的,它会完成,没有什么能阻止它。

阻止goroutines “从外部”完成的唯一事情是从main()函数返回(这也意味着完成程序的执行,但这在你的情况下永远不会发生)。以及其他导致不稳定状态的情况,例如内存不足。


查看完整回答
反对 回复 2021-10-18
?
GCT1015

TA贡献1827条经验 获得超4个赞

是的,它将完全独立于您的请求而完成。

这对于完成缓慢的操作非常有用,例如与您的响应无关的数据库更新(例如:更新视图计数器)。


查看完整回答
反对 回复 2021-10-18
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信