Veja o exemplo de gobyexample.com: https://gobyexample.com/timers
timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 fired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
Pergunta: depois de parar o cronômetro fica go func()
travado para sempre? E se sim, qual seria a maneira correta de lidar com esse caso?
Se o timer for parado antes de disparar, a goroutine continuará esperando. Você tem que pará-la usando outro canal ou um contexto:
Sim.
Você pode deixar o código como está; não há problema em uma goroutine bloquear indefinidamente, desde que isso não cause um deadlock ou vazamento.
Se você quiser que a goroutine continue, veja a resposta de Burak Serdar . Se você quiser que a função apenas faça algo depois que o timer expirar (mas não depois que ele for parado), use AfterFunc .
Note que houve uma correção muito recente no Go 1.23. De time.Timer.Stop ...
E de time.Timer.NewTimer ...