小编典典

HTTP处理程序中的Goroutine执行

go

如果我在http处理程序中启动goroutine,即使返回响应后它也会完成吗?这是一个示例代码:

package main

import (
    "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是否会在所有情况下都完成?还是有什么特殊情况无法完成?


阅读 232

收藏
2020-07-02

共1个答案

小编典典

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

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

2020-07-02