go - time.Timer 的行为

标签 go

我是 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/

相关文章:

json - 在不知道Golang中结构的情况下,在JSON文件中编辑值

go - 从 C 代码调用 Go 库

go - 反射(reflect)零不等于零

object - 返回 interface{} 而不是 int64 时的额外分配

string - 在 go 中查找行数的最快方法?

go - 如何在proto文件中导入和使用protobuf timestamppb包?

Go:获取一组唯一的随机数

go - 如何创建一个空的 sql.Rows 实例?

encryption - 为什么 golang 加密示例不使用随机 IV?

go - 调用 GetMetadata 时禁用自动主题创建