golang channel
通道是用与协程之间通信的。读取不写、只写不读都会发生阻塞。
语法
var name chan type
name := make(chan type ,num) //num 指定通道数
不指定容量就是无缓冲通道,无缓冲 channel
通道的发送与接收操作,一定要放在两个不同的 Goroutine
协程中进行,否则会发生 deadlock
死锁。
//无缓冲通道需要读取和写入都同时准备就绪。
func main(){
//make创建通道时,不指定通道数就是无缓冲通道
ch := make(chan int)
go func(ch chan int){
ch <- 1
}(ch)
s:=<- ch
fmt.Println(s)
}
ch := make(chan int ,5)
只用于接收的channel
通道
<- chan int
// read函数专用于读取ch通道的内容
func read(ch <- int) {
<- ch
}
只用于发送的channel
通道
//参数
chan <- int
//write 专用于往ch通道写入内容
func write(ch chan <- int) {
ch <- 1
}
close
关闭管道。关闭管道之后,任然可以读取该管道。
ch := make(chan int,1)
ch<- 100
close(ch)
fmt.Println(<-ch) // 100