概念簡介
在前麵的例子中,我們講過 `for` 和 `range`
為基本的數據結構提供了迭代的功能。我們也可以使用這個語法來遍曆從通道中取得的值。
例程代碼
package main
import "fmt"
func main() {
// 我們將遍曆在 `queue` 通道中的兩個值。
queue := make(chan string, 2)
queue <- "one"
queue <- "two"
close(queue)
// 這個 `range` 迭代從 `queue` 中得到的每個值。因為我們
// 在前麵 `close` 了這個通道,這個迭代會在接收完 2 個值
// 之後結束。如果我們沒有 `close` 它,我們將在這個循環中
// 繼續阻塞執行,等待接收第三個值
for elem := range queue {
fmt.Println(elem)
}
}
執行&輸出
$ go run range-over-channels.go
one
two
# 這個例子也讓我們看到,一個非空的通道也是可以關閉的,
# 但是通道中剩下的值仍然可以被接收到。
課程導航
學習上一篇:Go語言教程:通道的關閉 學習下一篇:Go語言教程:定時器
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/range-over-channels