如果我在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是否会在所有情况下都完成?还是有什么特殊情况无法完成?
worker
是的,它会完成,没有什么可以阻止它。
停止goroutine完成 “从外部” 完成的唯一事情就是从main()函数返回(这也意味着完成程序的执行,但是这种情况永远不会发生)。其他导致不稳定状态的情况,例如内存不足。
main()