golang中的通道是什么
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家分享的是有关golang中的通道是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。golang中的通道类型是一种特殊的类型, 类型名字为chan。在任何时候
千家信息网最后更新 2025年12月02日golang中的通道是什么
这篇文章给大家分享的是有关golang中的通道是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
golang中的通道类型是一种特殊的类型, 类型名字为chan。在任何时候,同时只有一个goroutine访问通道进行并发和获取数据,goroutine间通过通道就可以进行通信。我们可以通过go关键字创建goroutine。
通道本身是同步的,通道的发送和接受数据默认是同步的,且遵循先进先出的规则以保证数据发送的顺序。
通道分为双向通道和单向通道。
双向通道:
chan1 := make(chan int, 10)
单向通道:
#单向只写通道,10 表示通道的容量chan2 := make(chan <- int, 10)#单向只读通道,10表示通道的容量chan3 := make(<- chan int, 10)
package mainimport ( "time" "github.com/golang/glog")func read(readChan <-chan int) { for data := range readChan { glog.Info(data) }}func write(writeChan chan<- int) { for i := 0; i < 100; i++ { writeChan <- i glog.Infof("write: %s", i) }}func main() { // 双向通道 writeReadChan := make(chan int) // 传入双向通道自动会转换成一个单项通道 go write(writeReadChan) glog.Info("start to read data from channel!") // 传入双向通道会自动转换成一个单项通道` go read(writeReadChan) // 关闭chan close(writeReadChan) time.Sleep(time.Second * 100) glog.Info("finishedAll!!")}通道分无缓冲通道和缓冲通道
无缓冲通道
unbufferChan1 := make(chan int)unbufferChan2 := make(chan int, 0)
缓冲通道
bufferChan := make(chan int, 1)
无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景:
通道中无数据,但执行读通道。
通道中无数据,向通道写数据,但无协程读取。
func occasion1() { noBufChan := make(chan int) <-noBufChan fmt.Println("read ")}// 场景2func occasion2() { ch := make(chan int) ch <- 1 fmt.Println("write success no block")}有缓存通道的特点是,有缓存时可以向通道中写入数据后直接返回,缓存中有数据时可以从通道中读到数据直接返回,这时有缓存通道是不会阻塞的,它阻塞场景是:
通道的缓存无数据,但执行读通道。
通道的缓存已经占满,向通道写数据,但无协程读。
// 场景1func occasion1() { bufCh := make(chan int, 2) <-bufCh fmt.Println("read from no buffer channel success")}// 场景2func occasion2() { ch := make(chan int, 2) ch <- 1 ch <- 2 ch <- 3 fmt.Println("write success no block")}感谢各位的阅读!关于"golang中的通道是什么"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
通道
数据
缓存
双向
场景
缓冲
单向
类型
阻塞
内容
单项
容量
更多
特点
篇文章
同步
不错
实用
特殊
先进
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北京电力应急软件开发价格
为什么选者软件开发这个专业
福建微型软件开发要多少钱
杭州西奥服务器参数表
asp 连接 数据库教程
魔兽世界怎么查服务器玩家
怀化快速软件开发哪家好
企业个人存在网络安全
数据库安全阶段测试
网络安全 网络文明手抄报
红帽杯网络安全攻防赛
h2数据库数据类型
罗永浩说中国互联网科技
济源app软件开发公司电话
说说对网络安全法的认识
无锡交易软件开发报价
网络安全国际会议
湖北好的软件开发不二之选
麒麟服务器操作系统
c# 如何编写数据库
美国高防服务器排名
泉州市台商区网络安全宣传周活动
金山区优势软件开发加工厂
数据库查询时间的条件查询
bmcl数据库
sql数据库执行代码解密
说说对网络安全法的认识
服务器硬件测试标准
access数据库基础知识
cc服务器显卡