Если я перемещаюсь по каналу тикера и остановке вызова(), канал останавливается, но не закрывается.
В этом примере:
package main
import (
"time"
"log"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
go func(){
for _ = range ticker.C {
log.Println("tick")
}
log.Println("stopped")
}()
time.Sleep(3 * time.Second)
log.Println("stopping ticker")
ticker.Stop()
time.Sleep(3 * time.Second)
}
Запуск производит:
2013/07/22 14:26:53 tick
2013/07/22 14:26:54 tick
2013/07/22 14:26:55 tick
2013/07/22 14:26:55 stopping ticker
Так что горутин никогда не выходит. Есть ли лучший способ справиться с этим делом? Должен ли я беспокоиться, что горутин никогда не выходил?