time.Timer的行为

I'm new to Go and the time package is a tad confusing for me. So I'm making a chat box and the idea is that when you send a message, the timer resets to 20 seconds, and if you don't respond by 20 seconds you get kicked out. The code I have works only if the person has typed something, but if they never input anything, they don't get kicked out. I tried applying Stop() before the for loop, but it doesn't work. Should I do all the timer before and after the loop rather than inside the for loop?

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)
}

You can use time.AfterFunc; for example;

package main

import (
    "fmt"
    "time"
)

func main() {
    timer := time.AfterFunc(time.Second*60, func() {
        fmt.Printf("you're out!")
    })
    defer timer.Stop()
}

'cause whether user types something or not you can close the connection and send to leaving channel.