golang channal中buf和for range一些用法
来源:互联网 发布:没提人工智能 编辑:程序博客网 时间:2024/06/04 23:22
go的gocontinue用法实现了轻量级的线程,可以被大量创建。线程之间用channal通信,以下说说基本用法。
channal的buf
c:=make(chan int ,3)
3就是设定的chanal的缓存量,缓存只意味着这个创建的channal可以同时存入3个数据,并不意味读channal时可以同时读出。
x:=<-c
读channal时仍然是以阻塞的方式一次一个地将数据读出。
当channal缓存中存在有效数据时,即使close掉channal,仍然可以读出buf里的数据。需要注意的是,从close掉的channal读数据时,channal是不阻塞的,当channal中的buf数据被读完时,仍然会以不阻塞的方式读出0值。
channal的for range
c:=make(chan int )
for i:=range c {
}
for rangge的方式可以取出channal中的数据,它取数据的方式是阻塞取数据,这和通常的方式是一致的,当channal中的数据为空时,它会阻塞等待数据。
如果在已经close掉channal的情况下,for range只会读完channal中的有效数据,然后接着往下执行,而不是向上面情况一样不断的读出0。
简单测试代码
import (
"fmt"
"time"
)
func main() {
c := make(chan int, 3)
fmt.Println("no buf")
go test1(c)
go test2(c)
go test3(c)
time.Sleep(3 * time.Second)
close(c)
//fmt.Println(<-c)
for i := range c {
fmt.Println(i)
}
//fmt.Println(<-c)
//for i := range c {
// fmt.Println(i)
//}
}
func test1(c chan int) {
c <- 1
}
func test2(c chan int) {
c <- 2
}
func test3(c chan int) {
c <- 3
}
0 0
- golang channal中buf和for range一些用法
- golang中一些基础用法
- python for range用法
- Python中range和xrange的用法
- golang中recover和panic用法
- golang中recover和panic用法
- 解读 nginx 中 chain 和 buf
- 解读 nginx 中 chain 和 buf
- golang 中fmt用法
- golang 中fmt用法
- Golang初级系列教程-控制结构-for-break-continue-range
- python中range和xrange的用法与区别
- golang中image/jpeg包和image/png包用法
- python中range()函数用法
- python中range()的用法
- golang中bytes包用法
- golang 中unicode包用法
- golang 中regexp包用法
- 【BZOJ3612】【HEOI2014】平衡 整数划分、
- OpenCV图像匹配算法之orb
- Transform组件C#游戏开发快速入门
- OJ求矩形方阵中三角元素之和
- docker使用笔记,自用以供参考
- golang channal中buf和for range一些用法
- 日经社説 20150109 表現の自由へのテロは断じて許されない
- Doxygen + Graphviz windows下安装配置(图解)
- 关于在webbrowser控件里面打开word文档的问题
- oracle数据中记录被另一个用户锁住
- Linux 的档案属性与目录配置
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File
- POJ 1006 Biorhythms [解题报告] Java
- easy-ui 的标签页tab,默认不全部加载,只在点击某个标签时进行加载。