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.