gpt4 book ai didi

go - 缓冲 channel 阻止执行

转载 作者:行者123 更新时间:2023-12-01 22:45:35 27 4
gpt4 key购买 nike

我有以下代码:

func (q *Queue) GetStreams(qi *QueueInfo) {
channel := make(chan error, len(qi.AudioChunks))
for _, audiInfo := range qi.AudioChunks {
go audiInfo.GetStream(q.APIChunkURL, q.Sender, channel)
}
i := 0
for err := range channel {
fmt.Println(i)
i++
if err != nil {
fmt.Println("Error getting audio", err)
}
}
fmt.Println("Passed")
}

func (au *AudioChunkPayload) GetStream(path string, rs *RequestSender, channel chan error) {
completeURL := fmt.Sprintf(path, au.AudioChunkID)
err := GetEncodedAudio(rs, completeURL)
if err != nil {
channel <- err
} else {
channel <- nil
}
}

那里 GetStream func 正在下载一些数据。大多数时候,长度为 qi.AudioChunks是 8,但这不是规则。我的问题是,该程序成功打印了数字 0-7(8 个 block ),但它永远不会进行下一次打印( fmt.Println(Passed) )。我所读过的有关缓冲 channel 的内容,我认为应该继续进行,但显然我错了。我怎样才能使我的功能 GetStreams继续并完成?

最佳答案

Range 在 channel 上循环,直到它显式 close d .

缓冲影响发送到不从 channel 接收的 channel 。

我正在尝试查找官方文档,但来自 A Tour of Go :

The loop for i := range c receives values from the channel repeatedly until it is closed.

关于go - 缓冲 channel 阻止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62267606/

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