首页 > 其他分享 >什么是golang中的channel

什么是golang中的channel

时间:2024-09-12 16:35:13浏览次数:7  
标签:ch 什么 goroutine golang channel func main Channel

在 Go 语言中,channel 是一种用于在 goroutine 之间进行通信和同步的工具。它允许一个 goroutine 发送数据到 channel,另一个 goroutine 从 channel 接收数据,从而实现并发编程中的数据交换。

 

Channel 的关键特性

  1. 类型安全:每个 channel 都有一个指定的类型,确保发送到 channel 的数据和从 channel 接收的数据都是相同类型。

  2. 同步:无缓冲 channel 实现了严格的同步机制,发送和接收操作会阻塞,直到双方都准备好。缓冲 channel 允许发送和接收操作在一定的缓冲区内不需要立即配对。

  3. 无锁通信:channel 提供了一种避免使用显式锁的方式来实现 goroutine 之间的安全通信。

  4. 方向性:channel 可以是双向的,也可以是单向的。单向 channel 只能用于发送或接收操作,这在函数签名中很有用。

示例

  1. 创建和使用 Channel:

    package main
    
    import "fmt"
    
    func main() {
    // 创建一个无缓冲的 channel
    ch := make(chan int)
    
    // 启动一个 goroutine 发送数据
    go func() {
    ch <- 42 // 发送数据到 channel
    }()
    
    // 从 channel 接收数据
    value := <-ch
    fmt.Println(value) // 打印接收到的数据
    }

     

  2. 带缓冲的 Channel

    package main
    
    import "fmt"
    
    func main() {
        // 创建一个缓冲区大小为 2 的 channel
        ch := make(chan int, 2)
    
        // 启动 goroutine 发送数据
        go func() {
            ch <- 1
            ch <- 2
        }()
    
        // 从 channel 接收数据
        fmt.Println(<-ch)
        fmt.Println(<-ch)
    }

     

  3. 单向 Channel
    package main
    
    import "fmt"
    
    func sendData(sendCh chan<- int) {
        sendCh <- 42
    }
    
    func receiveData(receiveCh <-chan int) {
        value := <-receiveCh
        fmt.Println(value)
    }
    
    func main() {
        ch := make(chan int)
    
        go sendData(ch)
        receiveData(ch)
    }

     

  4. 使用场景

    • 并发通信:在多个 goroutine 之间传递数据。
    • 任务调度:将任务分配给不同的 goroutine 处理。
    • 同步:通过 channel 实现 goroutine 之间的同步。

    Channel 是 Go 语言并发模型中的核心组件,使得编写并发程序变得更加直观和安全

标签:ch,什么,goroutine,golang,channel,func,main,Channel
From: https://www.cnblogs.com/-cyh/p/18410544

相关文章

  • 00 概念科普|大模型是什么
    AI大模型全套学习资料“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家,......
  • 什么是Carplay认证?什么样的Carplay认证过程?
    在当今的数字化时代,汽车不再仅仅是交通工具,更是人们生活中不可或缺的一部分。随着智能科技的不断发展,车载系统逐渐变得智能化和互联化。其中,CarPlay作为苹果公司推出的一款车载系统,凭借其简洁、直观和安全的操作体验,赢得了广大车主的喜爱。然而,要想让自己的车辆支持CarPlay功能,并不......
  • 为什么先进工艺需要check那么多corner?
      越先进的工艺,其制造生产是偏差也越大。所以导致了了很多corner的产生。如RCcorner有最基础的rcworst、cworst、rcbes和cbest情况。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5sigma的取值范围。    此外,工艺越先进,mos管的工作电压也会随之降低......
  • 异频gap是什么作用?所有异频都需要gap配置吗?UE能力与异频gap配置的关系?
    1.异频gap是什么作用?在LTE(长期演进技术)网络中,"异频gap"是指为了进行测量而有意地在特定时间内不发送或接收数据的过程。这个gap的主要目的是为了允许用户设备(UE)在其他频率上进行测量,以支持各种移动性管理和网络优化功能,比如异频小区重选(inter-frequencycellreselection)和异......
  • 安全生产许可证是什么?
    在经济高速发展的今天,安全生产已成为企业运营中不可忽视的一环。安全生产许可证,作为企业进入特定行业市场的“通行证”,其重要性不言而喻。本文将详细探讨安全生产许可证的含义、申请条件以及它在现代企业运营中的作用。一、安全生产许可证的定义安全生产许可证是由国家安全......
  • 为什么说运维工程师做不长久,做两年就赶快转网络安全或者研发
    前言很多从事IT网络运维工作的年轻小伙伴都会有个疑问,自己做的工作很杂似乎很基础,而且重复很多年,究竟有没前途。作为过来人告诉一个总结:前途大小,工资多少跟你的岗位和职称资质没有多少关系,跟你的经验技能和平台有关系。我今天来详细讨论下IT运维工程师的出路在哪里。IT运......
  • 做海外问卷怎么赚钱?渠道查总是没题为什么呢?
    大家好,我是金言问卷。做海外问卷赚佣金,有几个必须在意的点:上家要有靠谱的教学,能教会你怎么去做。而且要有实时更新的稳定题库资源,可24小时随时有题做,不然都白搭。每个海外渠道运营的问卷公司,其运营机制有所不同,大致分为“每日调查”、“积分墙”、“路由”、“直连”等。这......
  • 美团面试:G1 垃圾回收底层原理是什么?说说你的调优过程?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 什么是图像采集卡?它有何用途?
    图像采集卡是许多高端机器视觉系统中必不可少的组件。它们在各种环境下捕获高分辨率、高质量图像方面发挥着关键作用。如果您正在寻找工业机器视觉系统,那么您的视觉系统可能需要一个图像采集卡。但图像采集卡到底是什么?图像采集卡有什么用处?什么是图像采集卡?图像采集卡是机器视......
  • 做TikTok:你知道节点和专线有什么区别吗?
    现在很多朋友和商家都开始涉猎TikTok做电商直播,对于网络问题:选择节点还是专线?这两者到底有什么区别呢?今天我们来简单分析一下,帮助你找到最适合的网络方案。1.什么是节点?什么是专线?节点其实是网络中的“跳板+加速器”,通过分布在不同地区的节点服务器,帮助用户绕过地理限制,提升......