gpt4 book ai didi

go - 在 Go 中退出空流 http json goroutine 的解码

转载 作者:IT王子 更新时间:2023-10-29 01:14:34 25 4
gpt4 key购买 nike

我有一个长期存在的流式 json 响应,我正在 goroutine 中处理,如下所示。我正在使用退出 channel 定期退出 goroutine。在数据流动时(在下一个循环中)退出效果很好,但是,当没有流式传输时,decoder.Decode 会阻止执行等待下一行 json,这会阻止退出。关于如何优雅退出的建议?

quit := make(chan bool)

decoder := json.NewDecoder(response.Body) // response.Body is streaming json

go func() {
for {
select {

case <-quit:
return

default:
decoder.Decode(&myStruct) // this blocks when there's no data

process myStruct...

}
}
}()

... quit <- true // stop execution as needed

最佳答案

您不能中断阻塞读取。如果要中断响应体的读取,需要取消http请求。这将关闭连接,导致被阻塞的 io.Reader 返回 io.EOF

使用 Request.WithContext 创建一个“可取消”请求方法,并为其提供 cancellation context .

关于go - 在 Go 中退出空流 http json goroutine 的解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49055078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com