gpt4 book ai didi

go - 无缓冲 channel -多值传递

转载 作者:行者123 更新时间:2023-12-01 21:09:46 25 4
gpt4 key购买 nike

package main

import (
"fmt"
)

func main() {
in := make(chan int, 10)
out := make(chan int)

for i := 0; i < 10; i++ {
in <- i
}

close(in)

go func() {
for {
i, ok := <-in
if !ok {
close(out)
break
}

out <- i * 2 //THIS LINE
}
}()

for v := range out { // AND HERE
fmt.Println(v)
}
}
我对Go有点陌生,了解了缓冲 channel 和非缓冲 channel 之间的区别,但是我不确定这段代码如何工作。由于 out channel 未缓冲,是否应该创建死锁?我想念什么?

最佳答案

out channel 是未缓冲的,因此如果您在没有其他goroutine等待读取的情况下对其进行写入,则它将阻塞。读取相同:它将阻塞直到另一个goroutine向其写入。因此,goroutine阻止写出,直到main中的for循环从中读取为止。主goroutine将从中读出,直到关闭为止,因此当goroutine最终关闭时,for循环终止。

关于go - 无缓冲 channel -多值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62628595/

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