目标
我想从阅读器将数据发送到我的服务器。(在示例 aNopCloser
中,稍后它将是 an 的标准输出exec.Command
)
问题
请求永远不会结束。即使我手动关闭 cmdOut 程序也不会结束。具体:它永远不会到达“请求完成”行,并且永远不会调用wg.Done()
陷阱
所有数据都正确发送到服务器(即使使用exec.Command
标准输出)。但是它http.DefaultClient.Do
似乎仍然在听ReadCloser
它是空的(并在主程序中关闭)
代码
cmdOut := ioutil.NopCloser(bytes.NewBuffer([]byte("Hallo DU")))
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// localhost:1234 is a netcat server: "nc -l -p 1234"
req, _ := http.NewRequest("PUT", "http://localhost:1234", cmdOut)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Println(err)
return
}
// Never reaches this line
log.Println("Request Done")
}()
cmdOut.Close()
log.Println("Wait for go routine")
wg.Wait()
log.Println("DONE")