Go - Channel Handshake
Updated at 2013-12-09 22:40
Quit channels are used to terminate running goroutines. Sometimes you must terminate running goroutine so handshake quit channel is better.
package main
import (
"fmt"
"time"
)
func worker(messageChan chan string, quitChan chan bool) {
for {
select {
case messageChan <- "WORKER MESSAGE!":
case <-quitChan:
fmt.Println("START WORKER TERMINATION!")
quitChan <- true
return
}
}
}
func main() {
quitChan := make(chan bool)
messageChan := make(chan string)
go worker(messageChan, quitChan)
for i := 5; i >= 0; i-- {
fmt.Println(<-messageChan)
}
time.Sleep(2 * time.Second)
// Send boolean to start termination and wait termination to finish.
quitChan <- true
<-quitChan
fmt.Println("QUIT OK!")
}