【Go】关闭通道 用例展示
warning:
这篇文章距离上次修改已过189天,其中的内容可能已经有所变动。
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个有缓冲区的通道
ch := make(chan int, 5)
// 向通道发送数据
for i := 0; i < 5; i++ {
ch <- i
}
// 关闭通道
close(ch)
// 使用for-range结构接收通道数据,并使用ok-idiom检查通道是否关闭
for num, ok := <-ch; ok; num, ok = <-ch {
fmt.Printf("接收到数据: %d\n", num)
}
fmt.Println("通道已关闭,所有数据已接收完毕。")
// 使用select等待通道关闭的例子
case1 := make(chan int)
go func() {
time.Sleep(1 * time.Second) // 模拟一些处理过程
close(case1)
}()
select {
case _, open := <-case1:
if !open {
fmt.Println("通道case1已关闭")
}
case <-time.After(2 * time.Second):
fmt.Println("超时等待通道关闭")
}
}
这段代码首先创建了一个有缓冲区的通道,并向其发送了5个数据。然后关闭了这个通道。之后使用for-range结构从通道接收数据,并使用ok-idiom来检查通道是否关闭。最后,使用select和time.After来等待一个通道关闭的例子。
评论已关闭