Поведение «Тикер Стоп» на Голанге

Если я перемещаюсь по каналу тикера и вызываю stop (), канал останавливается, но не закрывается.

В этом примере:

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

Так что эта рутина никогда не выходит. Есть ли лучший способ справиться с этим делом? Должен ли я заботиться о том, чтобы горутин никогда не выходил?

Ответы на вопрос(4)

Ваш ответ на вопрос