在前面的例子中,我們已經(jīng)看到了for
和range
語句如何為基本數(shù)據(jù)結(jié)構(gòu)提供迭代。還可以使用此語法對從通道接收的值進行迭代。
此范圍在從隊列接收到的每個元素上進行迭代。因為關(guān)閉了上面的通道,迭代在接收到2
個元素后終止。
這個示例還示出可以關(guān)閉非空信道,但仍然接收剩余值。
所有的示例代碼,都放在
F:\worksp\golang
目錄下。安裝Go編程環(huán)境請參考:http://www.yiibai.com/go/go_environment.html
range-over-channels.go
的完整代碼如下所示 -
package main
import "fmt"
func main() {
// We'll iterate over 2 values in the `queue` channel.
queue := make(chan string, 2)
queue <- "one"
queue <- "two"
close(queue)
// This `range` iterates over each element as it's
// received from `queue`. Because we `close`d the
// channel above, the iteration terminates after
// receiving the 2 elements.
for elem := range queue {
fmt.Println(elem)
}
}
執(zhí)行上面代碼,將得到以下輸出結(jié)果 -
F:\worksp\golang>go run range-over-channels.go
one
two