gpt4 book ai didi

go - Ticker 间隔更改的意外行为

转载 作者:IT王子 更新时间:2023-10-29 01:53:18 25 4
gpt4 key购买 nike

我天真地写了一段代码来改变 time.Ticker 的间隔,在查看它时我很生气它的工作原理:

package main

import (
"fmt"
"time"
)

func main() {
ticker := time.NewTicker(5 * time.Second)
switcher := time.NewTimer(16 * time.Second)
for {
select {
case <-ticker.C:
fmt.Println("ticker " + time.Now().Format("15:04:05"))
case <-switcher.C:
fmt.Println("switching")
ticker = time.NewTicker(1 * time.Second)
}
}
}

$ go run main.go
ticker 02:19:03
ticker 02:19:08
ticker 02:19:13
switching
ticker 02:19:15
ticker 02:19:16
ticker 02:19:17

它做我想做的,即在 16 秒后将 ticker Ticker 的频率切换为一秒。然而,再读一遍我希望在 16 秒后,一个新的 Ticker 对象被创建,而 select 语句持有对旧 channel 的引用,防止它被垃圾收集并继续每五秒滴答作响。

那么为什么这段代码会改变代码的频率?

最佳答案

select 语句不是闭包,也不会“持有”对任何内容的引用。您只需替换 ticker 的值,如您所见,间隔会相应更改。

关于go - Ticker 间隔更改的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com