Привет! Меня зовут Макс, я Go-разработчик в IT-компании SimbirSoft. Хочу поделиться своим отзывом на книгу «100 ошибок в Go и как их избежать» Тейва Харшани. Книга заинтересовала меня тем, что автор фокусирует свое внимание на ошибках, как распространенных, так и более редких.

Об авторе

Тейва Харшани — старший инженер-программист в Docker. Он работал в области страхования, транспорта и в отраслях, где критически важна безопасность. В 2019 году в своем блоге сделал пост «10 самых распространенных ошибок, с которыми я сталкивался в проектах на Go». Пост стал популярен, после чего автор написал «100 ошибок в Go и как их избежать». Книга содержит описание распространенных ошибок, которые допускают Go-разработчики. Она в значительной степени сосредоточена на самом языке и его стандартной библиотеке, а не на внешних библиотеках или фреймворках. Обсуждения большинства ошибок сопровождаются конкретными примерами. 

Книга состоит из 12 глав

Глава «Go: просто научиться, но сложно освоить» объясняет, почему несмотря на то, что Go считается простым языком, его нелегко освоить досконально.

Глава «Организация кода и проекта» содержит описание распространенных ошибок, которые могут помешать организовать программный код чистым и удобным для поддержки.

В главе «Типы данных» обсуждаются ошибки, связанные с основными типами, срезами и картами, такими как переполнение, утечки памяти, неэффективные инициализации типов.

В главе «Управляющие структуры» исследуются распространенные ошибки, связанные с циклами и другими управляющими структурами.

В главе «Строки» рассматривается принцип представления строк и связанных с ними ошибок, связанные с концепцией рун, функций обрезки, итерацией и преобразованиям строк.

В главе «Функции и методы» обсуждаются распространенные проблемы, связанные с функциями и методами, такие как именованные параметры ре��ультата, выбор типа, отложенного выполнения (defer).

В главе «Обработка ошибок» рассматривается точная обработка ошибок в Go. Также автор говорит про оборачивания, проверки типа и значения ошибки.

В главе «Конкурентность: основы» представлены основные концепции конкурентности, параллелизма, планировщика Go, пакета sync, контекста, обращения с горутинами и состояния гонки.

В главе «Конкурентность: практика» рассмотрены примеры ошибок, связанных с конкурентностью при использовании каналов, горутин и других примитивов Go.

Глава «Стандартная библиотека» содержит описание распространенных ошибок, допускаемых при использовании стандартной библиотеки с HTTP, JSON или time API.

В главе «Тестирование» обсуждаются ошибки, которые делают тестирование и бенчмаркинг менее эффективными и точными.

Глава «Оптимизация» завершает книгу. В ней исследуются способы того, как оптимизировать приложение для повышения его производительности, от понимания основ функционирования центрального процессора до конкретных тем, связанных с Go.

Для кого эта книга

«100 ошибок в Go и как их избежать» предназначена для разработчиков, уже знакомых с языком Go, и тем, кто уже освоился в языке и хочет сделать свой код еще лучше. В ней не рассматриваются его основные понятия — синтаксис или ключевые слова. Книга описывает распространенные ошибки и их решения. 

Что понравилось

  • Каждая ошибка сопровождается примером

    В некоторых рассматриваемых ошибках есть более одного примера и большинство из них приближены к тем, которые можно встретить при разработке приложений (управляющие структуры, типы данных, конкурентность, тестирование  и даже организация кода).

  • Углубленное изучение

    В некоторых случаях автор углубляется в какую-то тему, чтобы читателю было ясно, о чем идет речь. Например, Тейва может привести частый пример, показать и расписать ошибку и после уже предлагать ее исправление.

  • Информация легко воспринимается

    Автор добавил иллюстрации для упрощения понимания общей картины ошибки. Также к коду всегда есть комментарии. Приводится краткое резюме по решению всех ошибок, описанных в главе.

  • Примеры на оптимизацию кода

    Мне понравилось, что некоторые рассматриваемые ошибки были связаны с более эффективной работой памяти или процессора. Например, «Ошибка #91: не понимать устройство кэша CPU» описывает архитектуру CPU, кэш-линии, размещение кэша и влияние на код Go. Я почерпнул для себя пару способов по оптимизации приложений на Go, которые теперь применяю на проектах.

Что не понравилось

  • Некоторые ошибки устарели

    Как и любой другой язык программирования Go развивается, с каждой новой версией в нем появляется все больше функционала, а старый меняется. Небольшая часть ошибок из этой книги была актуальна, например, до версии Go 1.22. Сейчас же знание о них скорее нужно для поддержки проектов, не переходящих на новую версию.

Почему не советую новичкам

В книге ошибки обхватывают весь язык Golang. Базовые вещи должны пониматься ясно и четко. Даже сам Тейва Харшани в начале книги пишет: «Предполагается, что вы уже занимались р��альным проектом на Go». Поэтому если вы этого еще не делали, перед чтением этой книги, советую попробовать написать собственное приложение на Go.

Итог

Некоторые примеры из этой книги я использовал в квизе по Go и статье. Также благодаря книге я изменил свой стиль написания кода и подход к работе со структурами с динамической работой памяти. Книга «100 ошибок в Go и как их избежать» не просто даст вам знания, но и повысит ваш уровень, как разработчика.

«100 ошибок в Go и как их избежать» — книга, которую я рекомендую прочесть каждому, кто уже начал разрабатывать на Go. Книга настолько хороша, что из всего прочитанного по Go я считаю работу Харшани лучшей и ставлю ей 5 из 5.

А что вы думаете по поводу этой книги, если тоже читали ее?

Спасибо за внимание!

Больше авторских материалов для Go-разработчиков читай в соцсетях SimbirSoft – ВКонтакте и Telegram. Там мы также публикуем актуальные вакансии, анонсы IT-мероприятий, практикумов и интенсивов. Кстати, в нашем сообществе в VK можете проверить свои знания по Go: 1 часть, 2 часть, 3 часть.