不确定这是否是正确的设计,但我怀疑问题是在您启动第二个go例程的地方,第一个go例程继续并完成了写入连接等操作。
要停止此操作,您可以使用等待组(http://golang.org/pkg/sync/#WaitGroup)使第一个例程等待。
这阻止了您试图将其放入线程的全部理由(因此,我认为您遇到了设计问题)。
这是一些未经测试的代码,应该可以正常工作,或者至少在正确的方向上有所帮助。
package mainimport ( "encoding/json" "net/http" "sync" )type MyStruct struct { A, B, Total int64}func (s *MyStruct) add() { s.Total = s.A + s.B}func process(w http.ResponseWriter, cr chan *http.Request) { r := <- cr var s MyStruct json.NewDeprer(r.Body).Depre(&s) s.add() json.NewEnprer(w).Enpre(s)}func handler(w http.ResponseWriter, r *http.Request) { cr := make(chan *http.Request, 1) cr <- r var pleasewait sync.WaitGroup pleasewait.Add(1) go func() { defer pleasewait.Done() process(w, cr) // doesn't work; no response :-( }() // process(w, cr) // works, but blank response :-( pleasewait.Wait()}func main() { http.HandleFunc("/add", handler)}


