Новости

25.02.2025

Книга: «Go: идиомы и паттерны проектирования, 2-е изд.»

К выходу перевода книги «Go: идиомы и паттерны проектирования, 2-е изд.» мы долго думали, чем же удивить читателя. Так мы возьмём рецензию Томаса Свояновского — full-stack разработчика с восьмилетним опытом. Он в рецензии постарался учесть отличия второго издания книги от первого, подробно объяснил, о чём Джон Боднер писал и какие знания вкладывал на страницы.

Приятного чтения!

Написав эту книгу, Джон рассказал о том, как пришёл к разработке на Go, поделился секретами мастерства, помогающими написать книгу по программированию, а также пояснил, в чём уникальность Go, благодаря чему он так выделяется в ландшафте современной разработки ПО.

От Java к Go: смена парадигмы


Начиная карьеру программиста, Джон выбрал язык Java – ещё в те времена, когда только вышла версия Java 1.0. Но со временем его стало раздражать усложнение языка Java и всё новые уровни опосредованности — в особенности такие фреймворки как Spring, сильно зависящие от аннотаций и неявных поведений. Он описал сценарии, в которых зависимости могут непредсказуемо отказывать из-за неявного автоматического разрешения и вызывать ошибки во время выполнения, сложно поддающиеся отладке.

Познакомившись в 2010 году с первой демо-версией языка Go, Джон сразу оценил его простоту и Unix-подобную философию. «Мы с Java расстались, но по моей, а не по его воле», — сказал он, подчеркнув, как хорошо прямота Go согласовывалась с его взглядом на программирование. Минимализм Go казался глотком свежего воздуха по сравнению с паттернами Java, которые перегружены абстракциями.

Как создавалась книга «Go. Идиомы и паттерны проектирования»


Книга Джона «Learning Go», вышедшая в издательстве O’Reilly в 2021 году, предназначена опытным разработчикам, только начинающим изучать Go. Второе издание, вышедшее в январе 2024 года, дополнено обратной связью от читателей, упражнениями и обновлёнными примерами. Джон очень старался, чтобы второе издание получилось ещё лучше первого. Так, признаётся он, один пример с конкурентностью из первого издания получился настолько замысловатым, что автор сам затруднялся объяснять его на презентациях. В новом издании этот пример доработан, теперь он стал гораздо понятнее.

Джон считает, что писать книгу — серьёзное занятие. Первое издание стало для него «пандемийным проектом». Этот опыт помог ему понять, как важно подбирать ясные примеры и хорошо представлять себе собственную целевую аудиторию. «Вы пишете книгу не только для себя», — отмечает он, — «но и для людей, которым придётся жить с вашими словами».

Философия идиом в Go


Красной нитью через книгу Джона проходит идея о том, что на Go нужно писать идиоматический код. Но что он под этим понимает?

Идиоматическим является такой код на Go, который согласуется с философией проектирования в Go и с соглашениями, принятыми в языке. Идиоматический код обходится без ненужной сложности и использует возможности Go именно так, как было задумано. Например:

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


Джон подчёркивает, насколько важно «работать с языком, а не бороться с ним». Особенно это касается разработчиков, переходящих к программированию на Go, имея опыт работы с объектно-ориентированными языками (например, Java) или динамическими (например, Python).

Сложности и улучшения в Go


Притом, что простота — одна из самых сильных сторон Go, Джон остановился и на тех областях, в которых языке можно улучшить, в частности, на неизменяемости.

«В Go нет серьёзного бэкграунда неизменяемости», — объясняет он. Разработчики не могут объявлять срезы или словари как неизменяемые, и из-за этого (особенно в конкурентных программах) могут возникать трудноуловимые баги. Добавляя константы времени компиляции и конструкции, обеспечивающие неизменяемость, разработчики смогут писать более безопасный код.

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

Любимые инструменты Джона в экосистеме Go


Джон предлагает для разработки на Go инструментарий, в который, в частности, входят:

  • IntelliJ IDEA: с этой IDE Джон не расстаётся 20+ лет, хотя, время от времени пользуется и VS Code
  • Goimports: инструмент для форматирования кода и управления операторами импорта
  • GolangCI-Lint: полнофункциональный линтер, в котором предусмотрен набор полезных проверок
  • Go Vuln Check: недавно вышедший инструмент, помогающий находить уязвимости в зависимостях


Он также лестно отзывается об инструментальном оснащении Go, отмечая, что такие инструменты как Go Embed позволяют без труда связывать ресурсы непосредственно в двоичные файлы, тем самым отвечая философии Go, которая направлена на создание самодостаточных исполняемых файлов.

Совет разработчикам, знакомящимся с Go


Для разработчиков, переходящих на работу с Go, Джон подчёркивает, насколько важно изучить идиомы Go и освоить работу с системой типов этого языка. Он объясняет, что типы — это не бремя, они помогают писать более понятный и надёжный код.

“У любых данных есть тип,” — говорит он, — “просто в Go это обозначено явно, и язык даёт вам в помощь товарища-компилятора, который перепроверит вашу работу.”

 

Заключение


Энтузиазм Джона по поводу Go заразителен. Будь вы опытный разработчик или новичок, книга Боднера «Go. Идиомы и паттерны проектирования» послужит вам тем самым руководством, которое поможет вдумчиво изучить и освоить язык. Второе издание вышло как раз кстати, чтобы вы могли погрузиться в Go и самостоятельно оценить, почему многие разработчики так любят этот язык за его простоту, производительность и богатство инструментов.
До следующей встречи, воины… 💪

Приобретайте «Go: идиомы и паттерны проектирования, 2-е изд.» у нас на сайте издательства.


Комментарии: 0

Пока нет комментариев


Оставить комментарий






CAPTCHAОбновить изображение

Наберите текст, изображённый на картинке

Все поля обязательны к заполнению.

Перед публикацией комментарии проходят модерацию.