## 一、概念
* 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、推薦文章