首页 > 其他分享 >【Go高阶】细说 Channel 的进阶用法

【Go高阶】细说 Channel 的进阶用法

时间:2024-04-07 14:00:15浏览次数:24  
标签:ch 进阶 int make chan channel Go Channel

在Go语言中,channel 是一种内置的数据结构,用于在不同的goroutine之间进行通信。它是一个非常强大的并发工具,可以实现各种并发模式和同步机制。以下是一些Go语言中channel的高级用法:

1. Buffered Channels

带缓冲的channel可以在没有接收者的情况下发送数据,数据会被存储在channel的缓冲区中。这可以避免在发送和接收操作不匹配时发生的死锁。

ch := make(chan int, 5) // 创建一个能存储5个int类型数据的缓冲channel
go func() {
   
    ch <- 1 // 发送数据到channel
}()
value := <-ch // 从channel接收数据

2. Select

select语句可以用来等待多个channel操作,它会阻塞直到其中一个channel操作可以进行。这类似于switch语句,但是用于channel之间的选择。

c1 := make(chan int)
c2 := make(chan int)
for {
   
    select {
   
    case msg1 := <-c1:
        fmt.Println("Received from c1:", msg1)
    case c2 <- 23:
        fmt.Println

标签:ch,进阶,int,make,chan,channel,Go,Channel
From: https://blog.csdn.net/weixin_39801169/article/details/137461818

相关文章

  • Golang context (上下文)是什么
    Golangcontext(上下文)是什么?原创 几颗酥 几颗酥 2024-03-1111:24 广西 1人听过介绍Context 是golang中十分重要的接口,用于定义 goroutine 中的上下文信息,context 常用于以下几种情况:数据传递:在多个 goroutine 中传递数据超时管理:通过配置超时时间,可以......
  • go | 上传文件分析 | http协议分析 | 使用openssl 实现 https 协议 server.key、serve
    是这样的,现在分析抓包数据test.gopackagemainimport( "fmt" "log" "github.com/gin-gonic/gin")funcmain(){ r:=gin.Default() //Uploadsinglefile r.MaxMultipartMemory=8<<20 r.POST("/upload",func(......
  • 10 Python进阶:MongoDB
    MongoDb介绍MongoDB是一个基于分布式架构的文档数据库,它使用JSON样式的数据存储,支持动态查询,完全索引。MongoDB是NoSQL数据库的一种,主要用于处理大型、半结构化或无结构化的数据。以下是MongoDB数据库的一些关键特点和优势:分布式架构:MongoDB可以运行在多个服务器上,以......
  • #小白学Go-01# 学完Go指南感受,对比一下Go与其他语言
    本人以前是C/C++和Python选手,因为以后的工作需要用到Go,所以只好从零开始学习Go。本篇记录一下刚看完Go指南的感受,可能理解还不到位。总体感受学完Go指南给我最大的感觉就是,在变量定义方面很像Pascal,在函数、结构体、方法方面很像C,虽然没有C++中类的概念,但是通过方法可以实现类似......
  • 物流系统django版本
    1,创建modelspyfromdjango.dbimportmodelsclassGoods(models.Model):  id=models.AutoField(primary_key=True)  name=models.CharField('货物名称',default='',max_length=50)  source=models.CharField('渠道',max_length=......
  • solidity语言语法补充(进阶版)
    函数修改器:在Solidity中,函数修改器(FunctionModifiers)是一种用于修改函数行为的特殊类型。它可以在函数执行前、执行后或者在函数执行期间对函数的行为进行修改或增加额外的逻辑。函数修改器通常用于提高代码的重用性、简化代码结构,并确保一致的行为。1.定义函数修改器函数......
  • 创建虚拟环境时报错:AttributeError: module ‘lib‘ has no attribute ‘OpenSSL_add_
    1.问题缘由用pycharm创建虚拟环境时遇到了如下问题:2.解决办法在旧版本的pyopenssl中使用最新版本的加密技术会报这个错误。升级pyopenssl可以解决这个问题。pipinstall--upgradepyopenssl更新成功 成功创建新的虚拟环境......
  • Java/Mysql数据库+django学生就业管理系统 24237(免费领源码)计算机毕业设计项目推荐上
    学生就业管理系统摘 要随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为了方便用户快速定位自己感兴趣......
  • python计算机毕设【附源码】便利店收银管理系统(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和经济的进步,便利店作为一种新型的零售业态在城市中迅速崛起。便利店以其便捷的地理位置、丰富的商品种类和高效的服务赢得了消费者的青睐。......
  • JetBrains GoLand 2024.1 (macOS, Linux, Windows) - 为 Go 开发者打造的完整 IDE
    JetBrainsGoLand2024.1(macOS,Linux,Windows)-为Go开发者打造的完整IDE请访问原文链接:JetBrainsGoLand2024.1(macOS,Linux,Windows)-为Go开发者打造的完整IDE,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsGoLand-GoFullStackGo......