golang range chan

在 Go 语言中,
range
关键字可以用于迭代切片、映射、字符串以及通道(channel)。当用于通道时,
range
会持续从通道中读取数据,直到通道被关闭。下面是一个使用
range
迭代通道的基本示例:
package main

import (
“fmt”
“time”
)

func main() {
// 创建一个无缓冲的通道
ch := make(chan int)

// 启动一个协程,向通道发送数据
go func() {
for i := 1; i <= 5; i++ { ch <- i // 向通道发送数据 time.Sleep(1 * time.Second) // 模拟耗时操作 } close(ch) // 发送完毕后关闭通道 }() // 使用 range 迭代通道 for value := range ch { fmt.Println(value) } } 在这个示例中: 我们创建了一个名为 ch 的无缓冲通道。 通过一个协程向通道发送一系列整数,每发送一个数字后暂停一秒钟。 使用 range 循环迭代通道。每次迭代都会从通道中读取一个值,直到通道被关闭。 当通道被关闭后, range 循环会结束。 注意,关闭通道是一个重要的步骤,因为它会通知迭代通道的 range 循环结束迭代。如果通道没有被关闭, range 循环可能会永远阻塞下去。