并发http请求没有响应

我正在玩Go,但有一个我无法解决的问题。


以下代码是重现我的问题的最少可能的代码。原始代码的目标是将http请求委托给goroutines。每个goroutine都会进行一些繁重的图像计算,并且应该做出响应。


package main


import (

    "fmt"

    "runtime"

    "net/http"

)


func main() {

    http.HandleFunc("/", handle)

    http.ListenAndServe(":8080", nil)

}


func handle(w http.ResponseWriter, r *http.Request) {


    // the idea is to be able to handle several requests

    // in parallel


    // the "go" is problematic

    go delegate(w)

}


func delegate(w http.ResponseWriter) {


    // do some heavy calculations first


    // present the result (in the original code, the image)

    fmt.Fprint(w, "hello")

}

如果是,go delegate(w)我没有回应,没有回应,go效果很好。


谁能解释这是怎么回事?非常感谢!


慕标琳琳
浏览 257回答 3
3回答

holdtom

已经从“外部” goroutine(每个请求一个)中调用了该处理程序。处理程序必须在返回之前做所有必须做的事情,例如编写完整的响应。您将“过早”返回多余的go语句的b / c。请尝试简单地将“委托”的主体放在“句柄”中,并检查是否可以改善;-)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go