golang chan
package mainimport "fmt"func main() {c := make(chan int, 1)select {case c <- 10 : // 写入chan}select {case c <- 20 : // 写入chan,写不进去就丢弃default:}value , ok := <- c // 从chan中读取,ok是用来判断通道c是否关闭,// 如果通道c关闭,仍然有数据,则ok为true,直到没有数据ok为falsefmt.Printf("value(%T)(%v) = %v\n",value, ok, value)close(c)value , ok = <- c // 从chan中读取fmt.Printf("value(%T)(%v) = %v\n",value, ok, value)}
value(int)(true) = 10
value(int)(false) = 0
带缓存chan
package main
import ("fmt""time"
)
func send(p chan<- int) {for i := 0; i < 5; i++ {p <- ifmt.Println("send:", i)}
}func receive(c <-chan int) {for i := 0; i < 5; i++ {v := <-cfmt.Println("receive:", v)}
}func main() {ch := make(chan int,5)go send(ch)go receive(ch)time.Sleep(1 * time.Second)
}
send: 0
send: 1
send: 2
send: 3
send: 4
receive: 0
receive: 1
receive: 2
receive: 3
receive: 4
不带缓存chan
package main
import ("fmt""time"
)
func send(p chan<- int) {for i := 0; i < 5; i++ {p <- ifmt.Println("send:", i)}
}func receive(c <-chan int) {for i := 0; i < 5; i++ {v := <-cfmt.Println("receive:", v)}
}func main() {ch := make(chan int)go send(ch)go receive(ch)time.Sleep(1 * time.Second)
}
receive: 0
send: 0
send: 1
receive: 1
receive: 2
send: 2
send: 3
receive: 3
receive: 4
send: 4
package main
import ("fmt""time"
)
func send(p chan<- int) {for i := 0; i < 3; i++ {p <- ifmt.Println("send:", i)}
}func receive(p <- chan int){for{select{case <-p:fmt.Println("hello world")}}}func main() {ch := make(chan int)go send(ch)go receive(ch)time.Sleep(1 * time.Second)
}
send: 0
hello world
hello world
send: 1
send: 2
hello world
golang chan相关推荐
- golang chan 探究
前言 之前在看golang多线程通信的时候, 看到了go 的管道. 当时就觉得这玩意很神奇, 因为之前接触过的不管是php, java, Python, js, c等等, 都没有这玩意, 第一次见面, ...
- golang chan总结
goroutine和chan配合是golang的核心技术, 必须深入研究一下使用方法. 无缓冲chan 进和出都会阻塞. 例1: func main() {ch := make(chan error) ...
- python游戏服务器框架_mqant首页、文档和下载 - Golang/python语言开发的分布式游戏服务器框架 - OSCHINA - 中文开源技术交流社区...
mqant mqant 是一款基于 Golang 语言的简洁,高效,高性能的分布式游戏服务器框架,研发的初衷是要实现一款能支持高并发,高性能,高实时性的游戏服务器框架,也希望 mqant 未来能够做即 ...
- golang实现andflow流程引擎
1.andflow引擎 andflow_js可以实现在Html端设计流程,并将设计结果保存为json模型,andflow可以用于设计业务流程.数据处理流程.工作流.控制流等一切可流程化的过程. 由于g ...
- 高性能分布式游戏服务器框架
欢迎大家Fork mqant开源框架 为什么决定要重新造一个轮子? 目前网上优秀的开源游戏服务器框架也不少(当然与web框架比起来就少太多了),但总结起来都各有各的优缺点,下面列出我在选型过程中的一些 ...
- Chrome | BookMarks
Bookmarks 书签栏 按键作者认证专题-首页 那山那水那个小陈 QQ邮箱 韩立刚老师主讲 计算机网络第5版谢希仁编写 全集156集_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili ERP系统 ...
- golang源码分析:调度器chan调度
golang调度机制chan调度 golang的调度策略中,碰见阻塞chan就会将该chan放入到阻塞的g中,然后再等待该chan被唤醒,这是golang调度器策略的主动调度策略之一,其中还有其他的主 ...
- golang基础-chan的select操作、定时器操作、超时控制、goroutine中使用recover
chan的只读和只写 a.只读chan的声明 Var 变量的名字 <-chan int Var readChan <- chan int b. 只写chan的声明 Var 变量的名字 ch ...
- 【转】Golang 关于通道 Chan 详解
原文: http://blog.csdn.net/netdxy/article/details/54564436 在用 chan 类型时,发生死锁的错误,表面上看不出什么问题 ------------ ...
- golang数据结构初探之管道chan
golang数据结构初探之管道chan 管道是go在语言层面提供的协程之间的通信方式,比unix的管道更易用也更轻便. 特效速览 初始化 声明和初始化管道的方式主要有以下两种: 变量声明 使用内置函数 ...
最新文章
- python array 语法_Python基本语法
- HDU 5695 Gym Class 拓扑排序
- Spring Boot中实现跨域的五种方式
- CV之OD:计算机视觉之目标检测(Object Detection)方向的简介、使用方法、案例应用之详细攻略
- 太强了!这个 Jupyter notebook 离线工具可以用一辈子!
- 互联网拥塞控制终极指南
- 苹果和虫子(信息学奥赛一本通-T1038)
- 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- java synchronized 参数_java – 将参数传递给synchronized块的目的是什么?
- css中的 font 与 font-size
- linux mencoder,linux下mencoder的一些用法
- oppo人脸识别解锁黑屏_opporeno4有屏幕指纹识别吗?支持人脸识别解锁吗
- 《MarkDown编辑器的使用技巧(修改录入方式与目录生成)|CSDN编辑器测评》
- 编译原理入门(一):GNU编辑器(GCC)原理简介
- ORA-01438: value larger than specified precision allowed for this column
- 无法远程连接到计算机 凭证,远程连接凭据不工作如何处理_远程桌面连接提示凭据无法工作的解决教程-win7之家...
- 易捷行云EasyStack入选2021信创云TOP10
- 深度学习利器之自动微分(2)
- 抖音账号主页设置推荐机制
- 盘点上海2010年入市新盘中最值得期待的楼盘
热门文章
- eclipse导入项目jsp页面报错完美解决
- 教你轻松查看QQ空间加密后的好友图片
- Codeforces Round #545 (Div. 2) C. Skyscrapers
- 新浪邮箱下载的都是php,为什么我用新浪邮箱以及手机号码注册的支付宝能够登陆,但是用163邮箱的支付宝登陆数据库就会报错...
- AttributeError: partially initialized module ‘re‘ has no attribute ‘findall‘
- 蒙氏素材1-1000珠链标签蒙特梭利教具
- 大麦携演协发布演出市场报告:95后成消费新贵 城市下沉提速
- wed简介及html简单标签(1)
- 《霍乱时期的爱情》书评
- 同程内网流传的分布式凤凰缓存系统手册,竟遭GitHub强行开源下载