### 單向channel
只接收或者只發送數據
```
var ch1 chan int //ch1 為雙向通道
var ch2 chan<- int //ch2為一個只能接收的單向通道
var <- chan int //為一個只能發送的單向通道
// "chan<-" 表示數據進入通道,"<-chan" 表示數據從通道中出來
```
```
package main
import "fmt"
// func main() {
// ch := make(chan int)
// go func() {
// for i := 0; i < 10; i++ {
// ch <- i
// }
// close(ch)
// }()
// for val := range ch {
// fmt.Println(val)
// }
// }
//生產者
func producer(ch chan<- int) {
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
}
// 消費者
func consumer(ch <-chan int) {
for data := range ch {
fmt.Println(data)
}
}
func main() {
// 通道
ch := make(chan int)
go producer(ch)
consumer(ch)
}
結果:
1 2 3 4 5 6 7 8 9
```
### 定時器
參考:https://blog.csdn.net/guyan0319/article/details/90450958
Tick函數是使用channel阻塞當前協程,完成定時任務的執行
```
package main
import (
"fmt"
"time"
)
// 定時器
func main() {
ticker := time.NewTicker(time.Second)
for {
<-ticker.C
fmt.Println("hello world!")
}
}
```
- 安裝開發環境
- 安裝開發環境
- 安裝詳細教程
- 引入包
- Go語言基礎
- 基本變量與數據類型
- 變量
- 數據類型
- 指針
- 字符串
- 代碼總結
- 常量與運算符
- 常量
- 運算符
- 流程控制
- if判斷
- for循環
- switch分支
- goto跳轉
- 斐波那契數列
- Go語言內置容器
- 數組
- 切片
- 映射
- 函數
- 函數(上)
- 函數(中)
- 函數(下)
- 小節
- 包管理
- 結構體
- 結構體(上)
- 結構體(中)
- 結構體(下)
- 小節
- 錯誤處理
- 錯誤處理
- 宕機
- 錯誤應用
- 小節
- 文件操作
- 獲取目錄
- 創建和刪除目錄
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 處理JSON文件
- 接口與類型
- 接口的創建與實現
- 接口賦值
- 接口嵌入
- 空接口
- 類型斷言(1)
- 類型斷言(2)
- 小節
- 并發與通道
- goroutine協程
- runtime包
- 通道channel
- 單向通道channel
- select
- 線程同步
- 多線程的深入學習
- http編程
- http簡介
- Client和Request
- get請求
- post請求
- 模塊函數方法
- 模塊
- fmt庫,模塊
- 項目練習
- 爬蟲:高三網
- 爬蟲:快代理
- 爬蟲:快代理2
- 多線程:通道思路
- 多線程爬蟲:快代理