众所周知,通道是并发运行的goroutine之间的通信媒介,因此它们可以相互发送和接收数据。默认情况下,通道是双向的,但是您也可以创建单向通道。只能接收数据的通道或只能发送数据的通道,就是单向通道。单向通道也可以通过make()函数创建,如下所示:
//仅接收数据 c1:= make(<- chan bool) //仅用于发送数据 c2:= make(chan<-bool)
单向通道使用示例1:
package main import "fmt" func main() { //仅用于接收数据 mychanl1 := make(<-chan string) //仅用于发送数据 mychanl2 := make(chan<- string) //显示通道的类型 fmt.Printf("%T", mychanl1) fmt.Printf("\n%T", mychanl2) }
输出:
<-chan string chan<- string
在Go语言中,允许将双向通道转换为单向通道,换句话说,您可以将双向通道转换为仅接收或仅发送通道,但反之亦然。如下面的程序所示:
package main import "fmt" func sending(s chan<- string) { s <- "cainiaojc" } func main() { //创建双向通道 mychanl := make(chan string) //在这里,sending()函数将双向通道转换为仅发送通道 go sending(mychanl) //在这里,通道只在goroutine内部发送,而在goroutine之外,通道是双向的,所以它打印cainiaojc$1nbsp; fmt.Println(<-mychanl) }
输出:
cainiaojc$1/pre>单向通道的使用:单向通道用于提供程序的类型安全性,从而使程序产生的错误更少。或者,当您要创建只能发送或接收数据的通道时,也可以使用单向通道。