Go Channel — goroutine 间通信
用 channel 在 goroutine 间安全传递数据 · 难度:高级 · +20XP
Channel — Go 并发的灵魂
Channel(通道)是 Go 最独特的特性——让多个 goroutine 之间安全地传递数据。你可以把它想象成一条管道:一端发送,另一端接收。
回顾:JS 用回调/Promise 处理异步。Go 直接让 goroutine 通过 channel 通信——更直观。
创建和使用 Channel
// 创建无缓冲 channel(同步)
ch := make(chan int)
// 发送
go func() { ch <- 42 }()
// 接收
value := <-ch // 阻塞等待直到有数据
// 带缓冲
ch := make(chan string, 10) // 可缓存10个
select — 多路复用
select {
case msg := <-ch1:
fmt.Println("来自ch1:", msg)
case msg := <-ch2:
fmt.Println("来自ch2:", msg)
case <-time.After(1 * time.Second):
fmt.Println("超时!")
}