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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

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

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

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

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

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

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

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

Источник: https://habr.com/ru/post/528122/


Интересные статьи

Интересные статьи

В середине лета мы начали крутить идею создания сайта со всеми PHP-активностями России, Украины и Беларуси. Зачем? Их стало так много в разных форматах, что пора бы уже агрегировать д...
ВведениеВ большинстве современных протоколов блокчейна каждый участник цепи скачивает и проверяет каждую транзакцию. Это естественным образом ограничивает сверху количест...
Когда новичок во Flutter спрашивает, почему какой-то виджет с width: 100 не ширины 100 пикселей, обычно ему отвечают, что надо обернуть этот виджет в Center, верно? Не надо так делать Если та...
Как широко известно, с 1 января 2017 года наступает три важных события в жизни интернет-магазинов.
В этом году исполняется юбилей — 16 лет, как был запущен сайт compression.ru, на котором автор и сотоварищи организуют сравнения видеокодеков и кодеров изображений. За это время были проведен...