Как стать автором
Обновить

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

Время на прочтение1 мин
Количество просмотров4.2K

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

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

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

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

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

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

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

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

Теги:
Хабы:
Всего голосов 21: ↑4 и ↓17-13
Комментарии4

Публикации

Истории

Работа

Go разработчик
127 вакансий

Ближайшие события