2 回答
TA贡献1111条经验 获得超0个赞
正如文档中暗示的那样,有些人ResponseWriter可能会实现该Flusher接口。
这意味着您可以执行以下操作:
func handle(res http.ResponseWriter, req *http.Request) {
fmt.Fprintf(res, "sending first line of data")
if f, ok := res.(http.Flusher); ok {
f.Flush()
} else {
log.Println("Damn, no flush");
}
sleep(10) //not real code
fmt.Fprintf(res, "sending second line of data")
}
请注意缓冲可能发生在网络或客户端的许多其他地方。
TA贡献1900条经验 获得超5个赞
如果我误解了您的问题,但是下面的内容可以解决问题吗?
package main
import (
"bytes"
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
body := make([]byte, int(r.ContentLength))
b := bytes.NewBuffer(body)
if _, err := b.ReadFrom(r.Body); err != nil {
fmt.Fprintf(w, "%s", err)
}
if _, err := b.WriteTo(w); err != nil {
fmt.Fprintf(w, "%s", err)
}
}
func main() {
http.HandleFunc("/", handler)
if err := http.ListenAndServe(":8080", nil); err != nil {
panic(err)
}
}
$ curl --data "param1=value1¶m2=value2" http://localhost:8080
返回:
参数1=值1&参数2=值2
您可以随时附加任何您想要的数据body,或者在再次将其全部写出之前从其他地方将更多字节读入缓冲区。
- 2 回答
- 0 关注
- 274 浏览
添加回答
举报