Было решено сделать сессию полноправным объектом (до этого было просто поле с временем последнего действия) с методом Close:
func (s *Session) Close(timeout time.Duration) {
d := s.LastActionTime.Add(timeout).Sub(time.Now())
for d > 0 {
time.Sleep(d)
d = s.LastActionTime.Add(timeout).Sub(time.Now())
}
// Closing the Session
}