You are correct: calling Reset on a timer that is neither stopped nor
expired will not cause any sort of deadlock, it will just lead to a
race for your program. The issue is simply that the only point of a
timer is for it to send some value on a channel. If you call Reset on
a timer that is neither stopped nor expired, then you have no idea
whether the value sent on the channel is from the old timer expiration
or the new timer expiration. If it's from the old timer expiration,
you will eventually get another one from the new timer expiration, but
you don't know whether that will happen or not.
If your program doesn't care about that, then it's fine to go ahead
can call Reset on an active timer. But it's hard to understand why a
program wouldn't care. Unless, I suppose, the timers are far in the
future and you can neglect the case of a goroutine pausing for that
long.
Ian