Go 时间的行为。计时器

Go 时间的行为。计时器,go,Go,我是新手,时间安排对我来说有点混乱。所以我制作了一个聊天框,它的想法是当你发送信息时,计时器会重置为20秒,如果你在20秒前没有回应,你就会被踢出。我的代码只有在这个人输入了一些东西时才有效,但是如果他们从不输入任何东西,他们就不会被踢出去。我尝试在for循环之前应用Stop,但它不起作用。我应该在循环之前和之后执行所有计时器,而不是在for循环内部执行所有计时器吗 func ... { timer := time.NewTimer(20 * time.Second) for inp

我是新手,时间安排对我来说有点混乱。所以我制作了一个聊天框,它的想法是当你发送信息时,计时器会重置为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()
}
'因为无论用户是否键入内容,您都可以关闭连接并发送到离开频道。

请显示一个