我正在玩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它可以很好地解决.
谁能解释一下发生了什么?非常感谢!
我遇到了一个小问题,对此我只有一个难看的解决方案。我无法想象我是第一个,但是我还没有找到有关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)