缓冲通道
- 非缓冲通道:
make(chan T)
一次发送,一次接受,都是阻塞式的 - 缓冲通道:
make(chan T, capacity)
发送:缓冲区满了,才会阻塞
接收:缓冲区空了,才会阻塞
创建容量为5的通道
package main
import "fmt"
func main() {
ch := make(chan int, 5)
fmt.Println(len(ch), cap(ch))
ch <- 100
ch <- 200
fmt.Println(len(ch), cap(ch))
data := <-ch
fmt.Println("读出data:",data)
fmt.Println(len(ch), cap(ch))
}
单向通道
双向通道:可读可写
单向通道:只读或只写
ch1:=make(chan int) //双向
ch2:=make(chan <- int) // 单向,只写
ch3:=make(<- chan int) // 单向,只读
一般单项通道都是作为函数形参的类型,起到安全和保护的作用,规定某个函数对channel只读或只写。
创建的时候一般都是双向通道,创建单项通道没什么用
package main
import "fmt"
func main() {
ch1:=make(chan int) //双向
//ch2:=make(chan <- int) // 单向,只写
//ch3:=make(<- chan int) // 单向,只读
go sendData(ch1)
data:=<-ch1
fmt.Println("data:",data)
}
func sendData(ch chan <-int){
ch<-100
}
网友评论