CodeFun Go

For-range 遍历通道

对于通道(chan),索引没有意义,因为通道类似于管道,其中值从一端进入,从另一端退出。

因此,对于通道,for range 循环会迭代通道中当前存在的值。

在迭代所有当前存在的值(如果有)之后,for range 循环不会退出,而是会等待下一个可能推送到通道的值,并且只有在通道关闭时才会退出。

package main

import "fmt"

func main() {
    ch := make(chan string)
	go pushToChannel(ch)

	for val := range ch {
        fmt.Println(val)
    }
}

func pushToChannel(ch chan<- string) {
    ch <- "a"
    ch <- "b"
    ch <- "c"
    close(ch)
}
a
b
c