Tip: Understand Golang Channel Directions
- Channel is used to communicate among Goroutines.
- Always image a channel as a pipe in the brain. A pipe of any concrete type of Golang, like string, int..etc. This pipe connects Goroutines
- There is sending side of this pipe on one Goroutines, and there is an ending side of this pipe on another Goroutines
- main() is also a Goroutine.
- We need to identify which Goroutine is sending side, which is the ending side.
sends chan<- string
- the chan<- string means there is a string on the sending side of pipe
- We use it like sends <- "my sending string"
ends
<-chan string the <-chan string means there is a string on the ending side of pipe We use it like ending_message <-ends or <-endsfor range <channel name>: it's used on the ending side the pipe to fetch valuestime.Ticker is a good example of ending side of pipetype Ticker struct {
C <-chan Time // The channel on which the ticks are delivered.
// contains filtered or unexported fields
}
Below is another advance example of sending / ending side- os.Signal is the sending side of channel sigs
- another process or thread from OS
- main() goroutines is the ending side of channel sigs
// Registering signals - INT and TERM
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
// Process blocked here and waiting for signal(term/int)
<-sigs
No comments:
Post a Comment