1 回答

TA貢獻1846條經(jīng)驗 獲得超7個贊
根據(jù) GO 緩沖區(qū)的概念,您可以根據(jù)定義的緩沖區(qū)大小將元素推送到通道中(在您的情況下為 2)。但當(dāng)一個元素被推入通道時,主 GO 例程正在讀取相同的元素,這導(dǎo)致通道大小減小到零。因此,如果您在讀取語句之前花一些時間。睡眠,您將得到預(yù)期的結(jié)果。
`
package main
import (
"fmt"
"time"
)
func write(ch chan int) {
for i := 1; i <= 5; i++ {
ch <- i
fmt.Printf("Channel's length is %d\n", len(ch))
}
close(ch)
}
func main() {
ch := make(chan int, 2)
go write(ch)
time.Sleep(2*time.Second)
for v := range ch {
fmt.Println(v)
time.Sleep(2*time.Second)
}
}`
上述代碼的輸出是:
通道長度為1
通道長度為2
1
通道長度為2
2
通道長度為2
3
通道長度為2
4
5
- 1 回答
- 0 關(guān)注
- 129 瀏覽
添加回答
舉報