Golang 单向通道

Golang 单向通道

我们知道,通道是同时运行的goroutine之间的通信媒介,这样它们就可以互相发送和接收数据。默认情况下,通道是双向的,但你也可以创建一个单向的通道。一个只能接收数据的通道或一个只能发送数据的通道就是单向通道。单向通道也可以在make()函数的帮助下创建,如下所示。

// Only to receive data
c1:= make(<- chan bool)

// Only to send data
c2:= make(chan<- bool)

例1 :

// Go program to illustrate the concept
// of the unidirectional channel
package main
 
import "fmt"
 
// Main function
func main() {
 
    // Only for receiving
    mychanl1 := make(<-chan string)
 
    // Only for sending
    mychanl2 := make(chan<- string)
 
    // Display the types of channels
    fmt.Printf("%T", mychanl1)
    fmt.Printf("\n%T", mychanl2)
}

输出

<-chan string
chan<- string

将双向通道转换为单向通道

在Go语言中,你可以将双向通道转换为单向通道,或者换句话说,你可以将双向通道转换为只接收或只发送的通道,但反之则不可能。如下面的程序所示。

例子

// Go program to illustrate how to convert
// bidirectional channel into the
// unidirectional channel
package main
 
import "fmt"
 
func sending(s chan<- string) {
    s <- "GeeksforGeeks"
}
 
func main() {
 
    // Creating a bidirectional channel
    mychanl := make(chan string)
 
    // Here, sending() function convert
    // the bidirectional channel
    // into send only channel
    go sending(mychanl)
 
    // Here, the channel is sent
    // only inside the goroutine
    // outside the goroutine the
    // channel is bidirectional
    // So, it print GeeksforGeeks
    fmt.Println(<-mychanl)
}

输出

GeeksforGeeks

单向通道的使用: 单向通道是用来提供程序的类型安全的,这样,程序的错误就会减少。或者当你想创建一个只能发送或接收数据的通道时,你也可以使用单向通道。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程