### 单向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
- 多线程:通道思路
- 多线程爬虫:快代理