当前位置: 首页 > news >正文

go中的channel

Go(Golang)中的 channel 是一种 并发原语,用于 Goroutine 之间的通信。它就像是一条管道,允许你在不同的 goroutine 之间安全地传递数据。


🧠 基本概念

ch := make(chan int) // 创建一个传输 int 类型的 channel

你可以使用 <- 操作符向 channel 发送接收 数据:

ch <- 10     // 发送数据到 channel
x := <-ch    // 从 channel 接收数据

🧪 示例:Goroutine 之间通信

package mainimport "fmt"func worker(ch chan string) {ch <- "hello from worker" // 发送数据
}func main() {ch := make(chan string)go worker(ch)         // 启动 goroutinemsg := <-ch           // 主线程阻塞等待接收fmt.Println(msg)      // 打印:hello from worker
}

📌 Channel 的类型

1. 无缓冲 channel(默认)

  • make(chan int)
  • 发送/接收操作必须同步,否则会阻塞。

2. 带缓冲 channel

ch := make(chan int, 3)
  • 可以最多缓存 3 个值。
  • 发送不会立刻阻塞,直到缓冲区满。

🚧 关闭 channel

close(ch)
  • 表示你不会再向 channel 发送数据了。
  • 接收方可以通过判断是否关闭:
v, ok := <-ch
if !ok {fmt.Println("channel closed")
}

🚦 select 多路复用

select 用于等待多个 channel 中的操作:

select {
case msg1 := <-ch1:fmt.Println("received", msg1)
case msg2 := <-ch2:fmt.Println("received", msg2)
default:fmt.Println("no message")
}

🛑 注意事项

  • 向关闭的 channel 发送数据会 panic。
  • 接收已关闭 channel 的值不会 panic,而是会读到零值。
  • channel 是并发安全的,但读写需注意逻辑死锁。

🧭 应用场景

  • Goroutine 通信
  • 并发控制(信号量)
  • 任务队列
  • 发布/订阅模型

http://www.xdnf.cn/news/674443.html

相关文章:

  • 蓝桥杯b组c++赛道---字典树
  • WPF【10_2】数据库与WPF实战-示例
  • 中级统计师-统计学基础知识-第七章 回归分析
  • 8.安卓逆向2-frida hook技术-frida环境安装
  • 【IOS】【OC】【应用内打印功能的实现】如何在APP内实现打印功能,连接本地打印机,把想要打印的界面打印成图片
  • 简单网络交换、路由-华三单区域OSPF
  • AGI大模型(34):Advanced RAG之Pre-Retrieval(预检索)优化
  • OpenAI O3惊现算法的自由意识,AGI初现?
  • 在VSTO C#中获取Excel范围内最后一个非空单元格,可以通过以下几种方法实现
  • C标准库函数:字符串操作
  • 【深度学习】7. 深度卷积神经网络架构:从 ILSVRC、LeNet 到 AlexNet、ZFNet、VGGNet,含pytorch代码结构
  • NLP助力非结构化文本抽取:实体关系提取实战
  • 【ASR】基于分块非自回归模型的流式端到端语音识别
  • qt之开发大恒usb3.0相机二
  • Pytorch
  • 题目 3341: 蓝桥杯2025年第十六届省赛真题-抽奖
  • 颠覆传统,智领未来——UMI企业智脑:重新定义企业智能化转型的全新可能
  • 不同电脑同一个网络ip地址一样吗?如何更改
  • ODSA架构与操作-1
  • 【Elasticsearch】_update api的增量更新
  • 企业级RAG技术实战指南:从理论到落地的全景解析
  • .NET用C#设置Excel单元格和工作表的背景
  • AI大模型学习三十、ubuntu安装comfyui
  • vue3简介以及创建第一个vue3工程
  • 无人机仿真环境(3维)附项目git链接
  • 仓颉入门:特性
  • Elasticsearch的运维
  • ubuntu20.04安装CUDA、Cudnn
  • 深度学习————注意力机制模块
  • Milvus向量数据库DML操作实战教程