golang中的通道是什么
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章给大家分享的是有关golang中的通道是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。golang中的通道类型是一种特殊的类型, 类型名字为chan。在任何时候
千家信息网最后更新 2024年11月24日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安全错误
数据库的锁怎样保障安全
宝山区创新软件开发常见问题
服务器插显卡如何供电
接收邮件服务器英文
蔚来软件开发专家
宽带拨号服务名和服务器名
2020网络安全微视频展播
疫情的大数据库
游戏更新完找不到服务器怎么办
mvc是模仿桌面软件开发
excel 数据库vba
企业网络安全问答
大学 文献数据库 全吗
本校数据库
互联网科技纪录片
网络安全连带协议
委托软件开发 税
软件开发工程师专业技术工作
河南公安厅网络安全管理局
数据库与vb
服务器弱口令代码
研究生网络安全工程专业就业
幼儿园网络安全法
如何分辨服务器域控
信息与网络安全培训会
保障网络安全的3大支柱
靖江大型网络技术批发价
国家网络安全客服电话
软件开发翻译合同模板下载
软件开发公司就选青岗科技
最累的工作是软件开发嘛