文档章节

golang的channel使用

go-skyblue
 go-skyblue
发布于 2014/01/07 18:56
字数 217
阅读 11442
收藏 19

channel

sample1 close twice

ch := make(chan bool)
close(ch)
close(ch)  // 这样会panic的,channel不能close两次

读取的时候channel提前关闭了

ch := make(chan string)
close(ch)
i := <- ch // 不会panic, i读取到的值是空 "",  如果channel是bool的,那么读取到的是false

向已经关闭的channel写数据http://play.golang.org/p/vl5d5tkfl7

ch := make(chan string)
close(ch)
ch <- "good" // 会panic的

判断channel是否close

i, ok := <- ch
if ok {
    println(i)
} else {
    println("channel closed")
}

for循环读取channel

for i := range ch { // ch关闭时,for循环会自动结束
    println(i)
}

防止读取超时

select {
    case <- time.After(time.Second*2):
        println("read channel timeout")
    case i := <- ch:
        println(i)
}

防止写入超时 http://play.golang.org/p/aODfPNwdmj

// 其实和读取超时很像
select {
    case <- time.After(time.Second *2):
        println("write channel timeout")
    case ch <- "hello":
        println("write ok")
}

参考

  1. https://golang.org/ref/spec#Close
  2. http://stackoverflow.com/questions/34897843/why-does-go-panic-on-writing-to-a-closed-channel

© 著作权归作者所有

go-skyblue

go-skyblue

粉丝 87
博文 50
码字总数 31881
作品 5
杭州
程序员
私信 提问
加载中

评论(2)

go-skyblue
go-skyblue 博主

引用来自“罗厚付”的评论

判断通道是否关闭我试了并不起作用?是有问题吗?
没错呀,就是这样的
罗厚付
罗厚付
判断通道是否关闭我试了并不起作用?是有问题吗?
goroutine, channel 和 CSP

引子 老听 clojure 社区的人提起 core.async ,说它如何好用,如何简化了并发编程的模型,不由得勾起了我的好奇心,想了解一番其思想的源头:CSP 模型及受其启发的 goroutine 和 channel 。 ...

wangxuwei
2018/01/29
89
0
golang入门学习笔记(三)

作者: 一字马胡 转载标志 【2017-11-23】 更新日志 日期 更新内容 备注 2017-11-23 新建文章 go语言入门学习笔记(三) golang入门学习笔记系列 golang入门学习笔记(一) golang入门学习笔...

一字马胡
2017/11/24
0
0
golang入门学习笔记(二)

作者: 一字马胡 转载标志 【2017-11-22】 更新日志 日期 更新内容 备注 2017-11-22 新建文章 go语言入门学习笔记(二) golang入门学习笔记系列 golang入门学习笔记(一) interface for go...

一字马胡
2017/11/22
0
0
golang: 使用 delve 调试 golang 程序

猜你喜欢 golang: 在 Golang 中使用 Go 关键字和 Channel 实现并行 在 Golang 中使用 Go 关键字和 Channel 实现并行 使用Golang语言实现一个简单的Bitcask引擎的文件存储系统 安装 delve 官方...

d_watson
2016/05/25
114
0
Golang 学习笔记(06)—— 多线程

本文为转载,原文:Golang 学习笔记(06)—— 多线程 Golang 介绍 线程是cpu调度的最小单位,只有不同的线程才能同时在多核cpu上同时运行。但线程太占资源,线程调度开销大。go中的gorouti...

ChainZhang
2017/12/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
38分钟前
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部