100-go-mistakes/09-concurrency-practice/64-select-behavior/main.go
2021-12-27 15:57:20 +01:00

50 lines
794 B
Go

package main
import (
"fmt"
"time"
)
func main() {
messageCh := make(chan int, 10)
disconnectCh := make(chan struct{})
go listing1(messageCh, disconnectCh)
for i := 0; i < 10; i++ {
messageCh <- i
}
disconnectCh <- struct{}{}
time.Sleep(10 * time.Millisecond)
}
func listing1(messageCh <-chan int, disconnectCh chan struct{}) {
for {
select {
case v := <-messageCh:
fmt.Println(v)
case <-disconnectCh:
fmt.Println("disconnection, return")
return
}
}
}
func listing2(messageCh <-chan int, disconnectCh chan struct{}) {
for {
select {
case v := <-messageCh:
fmt.Println(v)
case <-disconnectCh:
for {
select {
case v := <-messageCh:
fmt.Println(v)
default:
fmt.Println("disconnection, return")
return
}
}
}
}
}