在,在“Go的Tour中,照相代码如下:
package main
import "fmt"
func main() {
ch := make(chan int, 2)
ch <- 1
ch <- 2
fmt.Println(<-ch)
fmt.Println(<-ch)
}
罚款和印刷
1
2
这种行为不同于对这一做法的描述,即:
只有在缓冲区满时,才进入缓冲通道。 缓冲区空空时的收货箱
<代码>ch <- 2,ch
s full,而且由于我们只管理了一条主要路线的单行路线,因此该行程应封到<编码>ch ,由接收人消费,因此该代码不应达到fmt.Println(<-ch)
的线,但应当说像样的东西。
致命的错误:所有活力都是灰色的——僵局!
然而,由于情况并非如此,我非常混淆,并寻求指导。
这里是我写的另外一部法典。
chh := make(chan int, 2)
go func() {
chh <- 1
fmt.Printf("chh after 1: %v, %v
", cap(chh), len(chh))
chh <- 2
fmt.Printf("chh after 2: %v, %v
", cap(chh), len(chh))
chh <- 3
fmt.Printf("chh after 3: %v, %v
", cap(chh), len(chh))
}()
fmt.Println(<-chh)
fmt.Println(<-chh)
fmt.Println(<-chh)
执行的结果是
1
chh after 1: 2, 0
chh after 2: 2, 0
chh after 3: 2, 1
2
3
更令人困惑。 此时还有另一批运送路线。 我期望,在第一个<代码>fmt.Println(<-chh)期间,主要路线应当被阻断。 附表领取人将接手直传匿名功能,并应在<条码>ch <- 2之前执行,然后将自己和附表领取人再次前往主行。 然而,结果显示,第2条路由<条码>chh <- 1立即封。 为什么如此?