前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang channel

golang channel

作者头像
运维开发王义杰
发布2023-08-21 11:21:07
1140
发布2023-08-21 11:21:07
举报
文章被收录于专栏:运维开发王义杰

在Go语言中,channel是一种用于在goroutine之间传递数据的通信机制。它可以让一个或多个goroutine等待另一个goroutine发送消息,也可以让一个goroutine等待多个goroutine的响应。

channel有以下几个特点:

  1. channel是类型安全的,只能发送和接收指定类型的数据;
  2. channel是阻塞的,当channel中无数据时,接收方会被阻塞,直到有数据可用;
  3. channel是同步的,发送方和接收方都需要准备好才能完成数据交换;
  4. channel是有缓冲区的,可以指定缓冲区的大小,在缓冲区未满时,发送方可以发送数据而不会被阻塞。但是,当缓冲区已满时,发送方会被阻塞。

在Go语言中,可以使用make函数来创建一个channel,如下所示:

ch := make(chan int) // 创建一个int类型的无缓冲区channel ch := make(chan int, 10) // 创建一个int类型的有缓冲区channel,缓冲区大小为10

向channel发送数据可以使用<-符号,从channel接收数据可以使用<-符号,如下所示:

ch <- 1 // 发送数据 x := <-ch // 接收数据

示例代码:

// 创建一个int类型的无缓冲区channel ch := make(chan int)

// 启动一个goroutine向channel发送数据 go func() { ch <- 1 }()

// 接收从goroutine发送过来的数据 x := <-ch

// 创建一个int类型的有缓冲区channel ch := make(chan int, 10)

// 启动10个goroutine向channel发送数据 for i := 0; i < 10; i++ { go func() { ch <- 1 }() }

// 接收从10个goroutine发送过来的数据 for i := 0; i < 10; i++ { x := <-ch }

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维开发王义杰 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档