你会使用chan吗?

chan 是 Go 语言并发编程中最核心的概念之一,它是 Channel(通道) 类型的关键字缩写。 Channel 的设计理念源于通信顺序进程(CSP, Communicating Sequential Processes),它提供了一种安全、同步的方式,让不同的 Goroutine(并发执行的“工人”)之间可以进行通信和数据交换。 1.什么是 chan (通道)? Channel 可以被理解为一个管道或队列,它具有以下核心特性: 类型安全: Channel 只能传输它在创建时指定的特定类型的数据。 例如:chan int 只能传输 int 整数。 同步机制: Channel 默认会阻塞发送和接收操作,直到另一端准备好。 并发安全: Go 运行时保证了对 Channel 的发送和接收操作是线程安全的,无需额外的锁(sync.Mutex)。 2.chan 怎么使用? 使用 Channel 主要分为三个步骤:创建、发送、接收。 2.1 创建 Channel 使用 make 函数创建 Channel。 //无缓冲通道 (Unbuffered) ch := make(chan Type) //容量为 0。发送和接收操作必须同时准备好,否则先执行的操作会一直阻塞,直到另一个操作发生。用于严格的同步。 ch := make(chan Type, N) //有缓冲通道 (Buffered) //容量为 N。通道可以存储 N个元素。只有当通道满了(发送)或空了(接收)时,操作才会阻塞。用于解耦和提高吞吐量。 dataCh := make(chan string) // 无缓冲,用于同步信号 taskCh := make(chan int, 10) // 有缓冲,容量为 10,用于传输任务 类型 语法 目的 切片 make([]Type, length, capacity) 分配底层数组,设置切片的长度和容量。 映射 make(map[KeyType]ValueType, capacity) 分配和初始化哈希表结构。 通道 make(chan Type, capacity) 创建通道并设置其缓冲大小。 2.2 发送数据 使用箭头操作符 <- 将数据发送到 Channel。 ...

2025年10月2日 · Mumu