1 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
ReadAll 從 r 讀取直到出現(xiàn)錯誤或 EOF 并返回它讀取的數(shù)據(jù)。
當(dāng)您用來讀取常規(guī)端點的正文時,它會起作用,因為有效負(fù)載有一個EOF
:服務(wù)器使用標(biāo)頭來Content-Length
告訴正文響應(yīng)有多少字節(jié),一旦客戶端讀取了那么多字節(jié),它就會明白它已經(jīng)讀取了全身上下都可以停下來。
但是,您的“流”端點沒有使用,因為正文的大小未知,它應(yīng)該在事件到來時寫入事件,因此在這種情況下Content-Length
您不能使用。ReadAll
通常,在這種情況下,您應(yīng)該逐行閱讀,其中每行代表一個事件。bufio.Scanner
正是這樣做的:
res, err := http.Get("http://localhost:8084/api/v1/events")
if err != nil {
panic(err.Error())
}
scanner := bufio.NewScanner(res.Body)
for e.scanner.Scan() {
if err := e.scanner.Err(); err != nil {
panic(err.Error())
}
event := e.scanner.Bytes()
var data Email
json.Unmarshal(event, &data)
fmt.Printf("Email: %v\n", data)
}
curl可以按預(yù)期處理響應(yīng),因為它會檢查端點是否會流式傳輸數(shù)據(jù),因此它會相應(yīng)地做出反應(yīng)。添加對問題的響應(yīng)可能會有所幫助curl。
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報