我是 Go 的新手,时间包让我有点困惑。所以我正在制作一个聊天框,想法是当你发送消息时,计时器重置为 20 秒,如果你在 20 秒内没有回复,你就会被踢出局。我的代码只有在该人输入内容时才有效,但如果他们从未输入任何内容,他们就不会被踢出局。我尝试在 for 循环之前应用 Stop()
,但它不起作用。我应该在循环前后而不是在 for 循环内执行所有计时器吗?
func ... {
timer := time.NewTimer(20 * time.Second)
for input.Scan() {
go func(){
<-timer.C
leaving <- ch
conn.Close()
}()
messages <- input.Text()
timer.Stop()
timer.Reset(20 * time.Second)
}
最佳答案
你可以使用time.AfterFunc
;例如;
package main
import (
"fmt"
"time"
)
func main() {
timer := time.AfterFunc(time.Second*60, func() {
fmt.Printf("you're out!")
})
defer timer.Stop()
}
'因为无论用户是否键入内容,您都可以关闭连接并发送到离开 channel 。
关于go - time.Timer 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49973357/