使用 range 处理 channel

如下例子

func myrange(ch chan int) {
fmt.Println(<-ch)
}

func main() {
ch := make(chan int)
go myrange(ch)

ch <- 1
      ch <- 2
      ch <- 3
      ch <- 4
      time.Sleep(1 * time.Second)
}

只会打印 1  剩下的不会打印



func myrange(ch chan int) {
for c := range ch {
fmt.Println(c)
}
}

func main() {
ch := make(chan int)
go myrange(ch)

ch <- 1
      ch <- 2
      ch <- 3
      ch <- 4
      time.Sleep(1 * time.Second)
}

当使用range 循环channel 之后

会打印 1,2,3,4


for c := range ch

会不断从channel接受值直到它关闭

在线交流