1 回答
TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
ReadAll 從 r 讀取直到出現(xiàn)錯(cuò)誤或 EOF 并返回它讀取的數(shù)據(jù)。
當(dāng)您用來(lái)讀取常規(guī)端點(diǎn)的正文時(shí),它會(huì)起作用,因?yàn)橛行ж?fù)載有一個(gè)EOF:服務(wù)器使用標(biāo)頭來(lái)Content-Length告訴正文響應(yīng)有多少字節(jié),一旦客戶端讀取了那么多字節(jié),它就會(huì)明白它已經(jīng)讀取了全身上下都可以停下來(lái)。
但是,您的“流”端點(diǎn)沒(méi)有使用,因?yàn)檎牡拇笮∥粗?,它?yīng)該在事件到來(lái)時(shí)寫(xiě)入事件,因此在這種情況下Content-Length您不能使用。ReadAll通常,在這種情況下,您應(yīng)該逐行閱讀,其中每行代表一個(gè)事件。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),因?yàn)樗鼤?huì)檢查端點(diǎn)是否會(huì)流式傳輸數(shù)據(jù),因此它會(huì)相應(yīng)地做出反應(yīng)。添加對(duì)問(wèn)題的響應(yīng)可能會(huì)有所幫助curl。
- 1 回答
- 0 關(guān)注
- 123 瀏覽
添加回答
舉報(bào)
