我定义了非缓冲通道并做了这些
1。在一次例程中写入一些值。
2。从主go例程中读取它的值。
下面的示例
package main
import "fmt"
func main() {
c := make(chan int)
go func() {
for i := 0;i < 3; i++ {
c <- i
fmt.Printf("write %v to channeln", i)
}
}()
for i := 0; i < 3; i++ {
res := <-c
fmt.Printf("read %v from channeln", res)
}
}
输出write 0 to channel
read 0 from channel
read 1 from channel
write 1 to channel
write 2 to channel
read 2 from channel
我不明白这个顺序。后从通道读取0从通道读取1";在此事件之后,它还没有被推送到通道?
我读语句,就像一旦值被推入它,go例程被阻塞,直到其他go例程从中读取值。但是在哪个点(或者上面的例子中的哪一行)它被阻塞了呢?
有人能解释一下吗?
问题在于fmt。Printf,不能保证你的输出不会混合。