http - 在 http 处理程序中执行 Goroutine

标签 http go goroutine

如果我在 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)
}

在上面的例子中,worker goroutine 会在所有情况下完成吗?或者有什么特殊情况不会完成?

最佳答案

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

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

关于http - 在 http 处理程序中执行 Goroutine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116870/

相关文章:

node.js - 是否需要响应 HTTP 请求?

go - Docker 发布对于 golang 应用程序无法正常工作

协程超时

php - curl --resolve 在 PHP CURL 库中等效

Javascript:重定向到不同的子域

amazon-web-services - 如何使用 golang 从 AWS S3 下载

string - Golang 数字的字母表示

Go例程和Defer

go 例程被阻止

javascript - 将 Javascript 变量从 html 提取/解码到 python 中