Проблемы с конкурентностью, которые вы регулярно замечаете в коде на Го?

от автора

Короткий пост, основной ценностью которого станут комментарии (я надеюсь).

Я перешел на Го довольно недавно. Пока отметил три проблемы:

  • time.Ticker не останавливается: пропущенная строчка defer tick.Stop()

  • В комментарии к библиотечному типу сказано что он «безопасен для конкурентного использования», но не сказано как именно методы могут вызываться и из каких горутин. Умолчанием можно считать «любой метод типа можно вызывать откуда угодно в любой последовательности», но на практике для большинства thread-safe типов это не так: у них есть либо некоторый жизненный цикл (start-stop), либо семантика поддерживает только одного писателя: мутирующие методы могут вызываться только из одной горутины, либо и то, и другое.

  • Пункт связанный и отчасти пересекающийся с предыдущим: в структуре есть поле sync.Mutex, но нет комментария поясняющего что он защищает, и главное, почему (например, «доступ к этим полям должен быть защищен, потому что они пишутся из горутины такой-то и читаются из горутин net/http сервера»).

    Отмечу, что даже в исходниках golang/go, которые обычно не балуют комментариями (не считая документирующих), все мьютексы в подпакетах net/ снабжены короткими комментариями.

Вопрос людям, которые пишут на Го подольше — какие проблемы регулярно замечаете вы, на ревью, копаясь в старом коде, или коде библиотек?

Этот пост — перевод-кросспост с поста на Реддите.

ссылка на оригинал статьи https://habr.com/ru/post/528122/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *