Related Articles

Related Articles

Unidirectional Channel in Golang
  • Last Updated : 18 May, 2020

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:

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

<-chan string
chan<- string

Converting Bidirectional Channel into the Unidirectional Channel

In Go language, you are allowed to convert a bidirectional channel into the 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:

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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
Recommended Articles
Page :