【发布时间】:2018-05-25 04:06:17
【问题描述】:
我知道Stop 功能无法关闭频道。我只是对tickerTest1 和tickerTest2 的两个不同结果感到困惑。
package main
import (
"time"
"log"
)
func tickerTest1() {
ticker := *time.NewTicker(time.Second)
count := 0
go func() {
time.Sleep(3*time.Second)
ticker.Stop()
}()
for range ticker.C {
count ++
log.Println("tickerTest1:", count)
}
}
func tickerTest2() {
ticker := time.NewTicker(time.Second)
count := 0
go func() {
time.Sleep(3*time.Second)
ticker.Stop()
}()
for range ticker.C {
count ++
log.Println("tickerTest2:", count)
}
}
func main() {
go tickerTest1()
tickerTest2()
}
【问题讨论】:
-
将代码发布为文本。
-
我认为问题是如果ticker是a pointer指向
time.NewTicker(time.Second)的结果,为什么在ticker.Stop()之后继续发送tick到ticker.C -
因为停止副本不会停止实例。参加 Go 之旅,尤其是方法部分和指针部分。
-
应始终避免使用文本的屏幕截图!而是复制并粘贴文本。
-
我已经粘贴了文本。对此我很抱歉。