昨天写代码的时候发现有一段代码的本应该是两秒的ticker足足10分钟才触发下一次的任务,具体原因在哪里也不清楚,应该是某处的bug了,但是我在测试的时候发现了一些不太理解的问题,求大佬能解惑。贴代码和执行结果:
![QQ20180522-0.png](https://static.studygolang.com/180522/a988243d4c6ae262e6537834906e4967.png)
你要看下,go 的用法,go执行匿名闭包函数时,传值的时候默认是拷贝传值的,你用*time.Newticker相当于传的就是一个值类型的拷贝,go func里面的ticker跟外面定义的不是一个了,是一个拷贝,之前的ticker是一个指针,所以拷贝指向的还是同一个ticker,你现在stop的只是拷贝的一个ticker,不是外面的那个,你可以打印一下两个ticker的内存地址,看看不是同一个了
#11
更多评论
time.NewTicker 返回的就是一个 *Ticker,你再取一次指针操作没有必要,我修改了一下代码,
```go
go func() {
time.Sleep(3 * time.Second)
fmt.Println("--start stop--")
ticker.Stop()
fmt.Println("--end stop--")
}()
```
ticker.stop() 被调用了,但是没有停止,估计是和你取了两次指针操作有关
#2