## 一、概念
* go语言提供了select关键字,可以监听channel上的数据流动
* 语法与switch类似,区别是select要求每个case语句里必须是一个IO操作
```
select {
case <-chan1:
// 如果chan1成功读到数据,则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据,则进行该case处理语句
default:
// 如果上面都没有成功,则进入default处理流程
}
```
## 二、实例
~~~
package main
import (
"fmt"
)
//select是监控channel数据流动的
func main() {
//创建通道
int_chan := make(chan int, 1)
string_chan := make(chan string, 1)
//开2个子协程
go func() {
//time.Sleep(2 * time.Second)
int_chan <- 1
}()
go func() {
string_chan <- "hello"
}()
//select里若匹配成功多个,则随机取一个执行
select {
case value := <-int_chan:
fmt.Println("intValue:", value)
case value := <-string_chan:
fmt.Println("strValue:", value)
}
fmt.Println("程序结束")
}
~~~
- 一、数组
- 二、切片
- 三、copy
- 四、MAP
- 五、结构体
- 六、结构体参数
- 七、面向”对象“
- 1、匿名字段
- 2、方法
- 3、包和封装
- 4、接口
- 5、异常处理
- 八、Json
- 九、文件操作
- 1、写文件
- 2、读取文件内容
- 3、拷贝文件
- 十、反射
- 1、查看类型,字段和方法
- 2、查看匿名字段
- 3、修改基本类型的值
- 4、修改结构体的值
- 5、调用方法
- 十一、并发编程
- 1、并行和并发
- 2、协程
- 3、runtime包
- 5、channel的使用
- 6、close
- 7、定时器
- 8、select
- 9、协程同步锁
- 十二、socket编程
- 十三、Http编程
- 十四、并发爬虫和数据处理
- 1、简易爬虫实例
- 2、并发爬取图片
- 3、读文件中的数据
- 4、数据清洗
- 其他
- 1、推荐文章