测试
2024-09-25
提示
Go 的 chan
(通道)是用于在 goroutine 之间进行通信的核心功能。它可以帮助你安全地传递数据并实现同步。以下是一些基本功能和用法:
-
声明通道:
go ch := make(chan int) // 创建一个传递 int 类型的通道
-
发送数据:
go ch <- 42 // 将数据 42 发送到通道 ch
-
接收数据:
go value := <-ch // 从通道 ch 接收数据
-
关闭通道:
go close(ch) // 关闭通道,表示不再发送数据
-
使用
for
循环接收数据:
go for value := range ch { fmt.Println(value) // 处理接收到的数据 }
-
通道的缓冲:
go ch := make(chan int, 5) // 创建一个缓冲区大小为 5 的通道
缓冲通道允许发送者在接收者准备好接收之前先发送一些数据。
- 选择语句:
你可以使用select
来同时等待多个通道操作:
go select { case msg1 := <-ch1: fmt.Println("Received from ch1:", msg1) case msg2 := <-ch2: fmt.Println("Received from ch2:", msg2) case ch3 <- 42: fmt.Println("Sent to ch3") default: fmt.Println("No communication") }
通道提供了强大的并发控制机制,可以有效地管理数据在不同 goroutine 之间的流动。