Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Unidirectional Channel in Golang

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

As we know that a channel is a medium of communication between concurrently running goroutines so that they can send and receive data to each other. By default a channel is bidirectional but you can create a unidirectional channel also. A channel that can only receive data or a channel that can only send data is the unidirectional channel. The unidirectional channel can also create with the help of make() function as shown below:

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

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

Example 1: 

Go




// 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)
}

Output:

<-chan string
chan<- string

Converting Bidirectional Channel into the Unidirectional Channel

In Go language, you are allowed to convert a bidirectional channel into a unidirectional channel, or in other words, you can convert a bidirectional channel into a receive-only or send-only channel, but vice versa is not possible. As shown in the below program: 

Example: 

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)
}

Output:

GeeksforGeeks

Use of Unidirectional Channel: The unidirectional channel is used to provide the type-safety of the program so, that the program gives less error. Or you can also use a unidirectional channel when you want to create a channel that can only send or receive data.


My Personal Notes arrow_drop_up
Last Updated : 06 Sep, 2022
Like Article
Save Article
Similar Reads