跟着猫哥学Golang 17 - Channel 进阶
来源:互联网 发布:淘宝网欧时力 编辑:程序博客网 时间:2024/04/28 14:24
上一章降到了Golang的channel有队列的特性,那么逻辑上很自然地可以引出两个操作:
- 循环channel元素;
- 关闭channel;
依次循环channel中的内容是很容易理解的,先进先出。举个栗子:
package mainimport "fmt"func main() {var pow = []int{1, 2, 4, 8, 16}c := make(chan int, 5)for _,i := range pow {c<-i}for j := range pow {j = <-cfmt.Println(j)}}
结果:
1
2
4
8
16
关闭channel也是非常有用的一种操作,看下面:
package mainimport "fmt"func main() {var pow = []int{1, 2, 4, 8, 16, 32, 64, 128, 256,512}c := make(chan int, 10)for i,v := range pow {if i == 5 {close(c)break} else {c<-v}}for j := range c {fmt.Println(j)}}结果:124816
另外,关于channel的关闭,有几个问题需要注意:
1. 不能两次关闭一个channel,否则会报错;
ch := make(chan int)close(ch)// close(ch) // 第一次以后的关闭,会panic的。
2. 不能往关闭的channel里写内容;
ch := make(chan string)close(ch)i := <- ch //会报错的...
3. 判断channel 是否关闭
_, ok := <- chif ok { fmt.Println("channel not closed...")} else { fmt.Println("channel closed...")}
0 0
- 跟着猫哥学Golang 17 - Channel 进阶
- 跟着猫哥学Golang 16 - Channel
- 跟着猫哥学Golang[2] - 变量
- 跟着猫哥学Golang[4] - switch
- 跟着猫哥学Golang[5] - 循环
- 跟着猫哥学Golang[7] - Map
- 跟着猫哥学Golang[8] - 函数
- 跟着猫哥学Golang[9] - slice
- 跟着猫哥学Golang 14 - error
- 跟着猫哥学Golang 15 - goroutine
- golang:channel
- 跟着猫哥学Golang[1] - Hello World!
- 跟着猫哥学Golang[6] - 结构体
- 跟着猫哥学Golang[3] - if else
- 跟着猫哥学Golang[10] - new & 指针
- 跟着猫哥学Golang[11] - range关键字
- 跟着猫哥学Golang 13 - 接口 interface
- 跟着猫哥学Golang 18 - select控制并发
- SpannableStringBuilder
- view存成bitmap
- EditText为密码输入设置为可见的实现
- Android 使用Loader示例
- 常用广播接收者
- 跟着猫哥学Golang 17 - Channel 进阶
- -TextView使用SpannableString设置复合文本
- 对于低密度屏幕的手机
- Ioc容器
- = 电话拨号器/点击事件写法 =发短信
- 有重复N个数,抽取M个不同数全排
- 分享 ShareUtils
- 如果希望点击父控件子控件也响应的话, 可以给子控件加如下属性: android:duplicateParentState="true"
- 关于FragmentManager动态管理Fragment时Fragment生命周期的探究