func main() {
c := make(chan os.Signal, 1)
signal.Notify(c)
ticker := time.NewTicker(time.Second)
stop := make(chan bool)
go func() {
defer func() { stop <- true }()
for {
select {
case <-ticker.C:
fmt.Println("Tick")
case <-stop:
fmt.Println("Goroutine closing")
return
}
}
}()
<-c
ticker.Stop()
stop <- true
<-stop
fmt.Println("Application stopped")
}
Peu importe le nombre de fois où j'ai exécuté le code ci-dessus, j'ai obtenu le même résultat. C'est-à-dire que "Goroutine closing" est toujours imprimé avant "Application stopped" après que j'ai appuyé sur Ctrl + C .
Je pense que, théoriquement, il y a une chance que "Goroutine closing" ne soit pas imprimé du tout. Ai-je raison ? Malheureusement, je n'obtiens jamais ce résultat théorique.
BTW : Je sais que la lecture et l'écriture d'un canal en une seule routine doivent être évitées. Ignorez cela temporairement.