Go(Golang)中的 channel 是一种 并发原语,用于 Goroutine 之间的通信。它就像是一条管道,允许你在不同的 goroutine 之间安全地传递数据。
ch := make(chan int) // 创建一个传输 int 类型的 channel
你可以使用 <-
操作符向 channel 发送 或 接收 数据:
ch <- 10 // 发送数据到 channel
x := <-ch // 从 channel 接收数据
package main
import "fmt"
func worker(ch chan string) {
ch <- "hello from worker" // 发送数据
}
func main() {
ch := make(chan string)
go worker(ch) // 启动 goroutine
msg := <-ch // 主线程阻塞等待接收
fmt.Println(msg) // 打印:hello from worker
}
make(chan int)
ch := make(chan int, 3)
close(ch)
v, ok := <-ch
if !ok {
fmt.Println("channel closed")
}
select
用于等待多个 channel 中的操作:
select {
case msg1 := <-ch1:
fmt.Println("received", msg1)
case msg2 := <-ch2:
fmt.Println("received", msg2)
default:
fmt.Println("no message")
}