Go channel

channel 是 Go 中用于 goroutine 之间传递数据和同步时序的核心机制,它把通信提升成一等语言结构。

#type / concept #status / growing #tech / dev #resource / go

[!info] related notes

Go channel

一句话定义

channel 是 Go 提供的并发通信机制,用来在 goroutine 之间安全地传递值,并在必要时形成同步点。

核心机制 / 工作原理

channel 最核心的两件事:

  • 传数据
  • 协调时序

基本操作包括:

  • make(chan T) 创建通道
  • ch <- value 发送
  • value := <-ch 接收
  • close(ch) 关闭

无缓冲 channel 常常意味着:

  • 发送方和接收方需要在时序上配对

有缓冲 channel 则允许:

  • 在容量范围内先写后读

最小例子 / 最小场景

ch := make(chan int)

go func() {
    ch <- 42
}()

value := <-ch
fmt.Println(value)

这个例子里 channel 同时承担了:

  • 值传递
  • goroutine 之间的同步

为什么 channel 是 Go 的主线

Go 鼓励“通过通信共享内存”,至少在很多基础并发场景里,这是更易读的主线。它不意味着锁没用,而是强调先把任务和数据流画清楚。

边界与易混淆点

  • channel 不是消息队列系统的完整替代,它是进程内并发原语
  • 关闭 channel 是发送方语义,不是接收方语义
  • 读已关闭 channel 和向已关闭 channel 发送,行为完全不同
创建于 2026/6/20 更新于 2026/6/20