go理论知识——Go Channel 笔记 [特殊字符]
2025/2/5 22:53:11
来源:https://blog.csdn.net/dhrmt/article/details/145383565
浏览:
次
关键词:go理论知识——Go Channel 笔记 [特殊字符]
go理论知识——Go Channel 笔记 📝
1. 基本概念 🧠
1.1 Channel 是什么?
- Channel 是 Go 语言中用于在不同 Goroutine 之间进行通信的机制。
- Channel 是类型安全的,意味着你只能发送和接收特定类型的数据。
1.2 Channel 的创建 🏗️
c := make(chan int)
c := make(chan int, 3)
2. 无缓冲 Channel 🚫
2.1 无缓冲 Channel 的特性
2.2 运行结果
- Goroutine 会发送
666
到 Channel,主 Goroutine 会接收并打印这个值。
3. 带缓冲 Channel 🛠️
3.1 带缓冲 Channel 的特性
- 带缓冲 Channel 是异步的,只有在缓冲区满时发送操作才会阻塞,只有在缓冲区空时接收操作才会阻塞。
- 示例代码:
c := make(chan int, 3)
go func() {for i := 0; i < 3; i++ {c <- ifmt.Println("子go程正在运行,发送的元素:", i, " len(c) = ", len(c), " cap(c) = ", cap(c))}
}()
time.Sleep(2 * time.Second)
for i := 0; i < 3; i++ {num := <-cfmt.Println("父go程正在运行,收到的元素:", num, " len(c) = ", len(c), " cap(c) = ", cap(c))
}
3.2 运行结果
- 子 Goroutine 会发送 3 个元素到 Channel,主 Goroutine 会接收并打印这些元素。
4. 关闭 Channel 🚪
4.1 关闭 Channel 的作用
4.2 注意事项
- 只有在没有任何数据需要发送时才关闭 Channel。
- 关闭后的 Channel 不能再发送数据,但可以继续接收数据。
5. Select 语句 🔄
5.1 Select 语句的作用
5.2 运行结果
fibonacii
函数会生成斐波那契数列并通过 Channel 发送,直到接收到 quit
信号。
6. 总结 📌
- Channel 是 Go 语言中非常重要的并发编程工具。
- 无缓冲 Channel 是同步的,带缓冲 Channel 是异步的。
- 使用
close
关闭 Channel,使用 select
处理多个 Channel 操作。