小编ffe*_*fel的帖子

并发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")
}
Run Code Online (Sandbox Code Playgroud)

go delegate(w)没有响应的情况下,没有go它可以很好地解决.

谁能解释一下发生了什么?非常感谢!

concurrency go

8
推荐指数
1
解决办法
1865
查看次数

处理函数中的接收者,例如filepath.WalkFunc

我遇到了一个小问题,对此我只有一个难看的解决方案。我无法想象我是第一个,但是我还没有找到有关SO的任何线索。

在下面的示例中(我故意简化了),我想在walk我的函数上有一个接收器filepath.WalkFunc

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

type myType bool

func main() {
    var t myType = true

    // would have loved to do something as:
    // _ = filepath.Walk(".", t.walk) 

    // that does not work, use a closure instead    
    handler := func(path string, info os.FileInfo, err error) error {return t.walk(path, info, err)}
    _ = filepath.Walk(".", handler)
}

func (t myType) walk(path string, info os.FileInfo, err error) error {

    // do some heavy …
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
0
解决办法
972
查看次数

标签 统计

go ×2

concurrency ×1