Короткий пост, основной ценностью которого станут комментарии (я надеюсь).
Я перешел на Го довольно недавно. Пока отметил три проблемы:
-
time.Tickerне останавливается: пропущенная строчкаdefer tick.Stop() -
В комментарии к библиотечному типу сказано что он «безопасен для конкурентного использования», но не сказано как именно методы могут вызываться и из каких горутин. Умолчанием можно считать «любой метод типа можно вызывать откуда угодно в любой последовательности», но на практике для большинства thread-safe типов это не так: у них есть либо некоторый жизненный цикл (start-stop), либо семантика поддерживает только одного писателя: мутирующие методы могут вызываться только из одной горутины, либо и то, и другое.
-
Пункт связанный и отчасти пересекающийся с предыдущим: в структуре есть поле
sync.Mutex, но нет комментария поясняющего что он защищает, и главное, почему (например, «доступ к этим полям должен быть защищен, потому что они пишутся из горутины такой-то и читаются из горутинnet/httpсервера»).Отмечу, что даже в исходниках golang/go, которые обычно не балуют комментариями (не считая документирующих), все мьютексы в подпакетах
net/снабжены короткими комментариями.
Вопрос людям, которые пишут на Го подольше — какие проблемы регулярно замечаете вы, на ревью, копаясь в старом коде, или коде библиотек?
Этот пост — перевод-кросспост с поста на Реддите.
ссылка на оригинал статьи https://habr.com/ru/post/528122/
Добавить комментарий