Если я колеблюсь по каналу тикера и остановке вызова(), канал остановлен, но не закрыт.Тик-стоп-поведение в Голанге
В этом примере:
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)
}
Running производит:
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
Так что goroutine никогда не выходит. Есть ли лучший способ справиться с этим делом? Должен ли я беспокоиться о том, что горутин никогда не выходил?
Вы получаете утечку памяти, если обычная процедура не выходит. Нажмите «Закрыть» (ticker.C), чтобы освободить процедуру Go. – fuz
Не удается закрыть его: «невозможно закрыть канал только для приема» – whatupdave