golang中的通道是什么
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章给大家分享的是有关golang中的通道是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。golang中的通道类型是一种特殊的类型, 类型名字为chan。在任何时候
千家信息网最后更新 2025年02月04日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安全错误
数据库的锁怎样保障安全
如何进入电子邮件服务器
中药方剂数据库书籍
专用会计软件开发的方式
庆阳市公安局开展网络安全
宝德服务器管理口地址
update数据库16进制
学校网络安全分析
本地隧道服务器
预防网络安全教育
java小软件开发代码
数据库的命名规则必须遵循
星巴克网络安全吗
网络安全管理与网络技术
nginx服务器管理
河北软件开发招标报价
索立信平板数据库
第八届网络安全宣传主题班会
原神 欧洲服务器在 哪个国家
我为群众办实事网络安全
网络安全的概念发生了什么变化
保险产品数据库
光遇怎么下载华为服务器
qt数据库连接池内存
平板电脑网络安全证书过期
存储服务器做硬盘
工业部网络安全大检查
维普数据库有学术论文吗
数据库数据量大怎么查
数据库原理与技术程序题
网络安全的突出亮点是