Gate: пропуск каждого N-го события

Код-ревьюMiddle15 минпроверка — Спринт08-t027

Опишите, какую задачу решает данный код. Какие проблемы есть в этом решении? Как бы вы переписали этот код?

Как на собесе: 15 минут, ищи всё — гонки, утечки, ошибки, безопасность, стиль. Ссылайся на строки.

review.gogo
1type Event struct {2	// Some fields here3}4 5type Emitter interface {6	Push(Event)7}8 9type Gate struct {10	threshold int3211	hits      int3212	mu        sync.Mutex13	emitter   Emitter14}15 16func NewGate(threshold int32, emitter Emitter) *Gate {17	return &Gate{18		threshold: threshold,19		emitter:   emitter,20	}21}22 23func (g *Gate) Push(e Event) {24	mu.Lock()25	g.hits++26 27	if g.hits >= g.threshold {28		g.hits = 029 30		go func() {31			g.emitter.Push(e)32		}()33	}34	mu.Unlock()35}
⌘ Enter — проверить