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