## 通道(channel)
#### 基本概念
1.什么是channel
简单来说channel就是goroutine之间消息**通信机制**。
2.如何创建一个channel
使用内置make函数来创建一个通道
```go
ch := make(chan int)//ch 的类型是`chan int`
```
跟map一样,通道是一个使用make创建的数据结构的**引用**。
当赋值或者作为参数传递到一个函数的时候,复制的是引用。
#### 主要操作
通道有两个主要操作:发送和接收,两者统称为通信。
还有第三种操作,close
由此可引发出单向通道类型。
```go
chan_read := <-chan int // 单向读
chan_write := chan<- int //单向写
```
#### 基本用法
举个例子说明一下channel的用法:
```go
select {
case <- chan1:
// 如果chan1成功读到数据
case chan2<- 1:
// 如果成功向chan2写入数据
default:
// 默认分支
}
```
如果需要防止超时,需要加上:time.After()
```go
//防止读超时
select {
case <- time.After(time.Second*2):
println("read channel timeout")
case i := <- chan_read:
println(i)
}
```
#### 应用
可以通过channel来做时间控制,代码按照先后循序完成才能执行。
在读取到chan1后,才能执行B()。
A和B可能在不同的函数体力。
```go
chan1 := make(chan int)
go A()
<- chan1
go B()
```
有疑问加站长微信联系(非本文作者))