Обзор на книгу Go на практике от Мэтт Катчер и Мэтт Фарина

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

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

Стоимость книги

В целом эту книгу могу смело рекомендовать к покупке, т.к. цена её не высока, мне досталась за 991 рубль с курьерской доставкой. Что эквивалентно 30-120 минутам рабочего времени программиста! Знания полученные из книги окупятся так же за пару часов, а самостоятельный поиск на просторах интернета аналогичной информации может занять несколько недель.

Пожалуй, если бы эта книга стоила 2 000 я бы так же её рекомендовал. Т.к. Соотношение объёма знаний к стоимости книги достаточно высокое.

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

Во-первых, уебанский стиль комментариев к коду. Вместо того, чтобы оформить комментарии в виде кода, в книге комментарии сделаны виде нашлёпок поверх кода и указанием стрелками куда они относятся. Это жутко не удобно и непривычно. Эти нашлёпки не выровнены по горизонтали и разбросаны по X-координате, к тому же их порядок по Y-координате может не совпадать с порядком следования кода, и только стрелкой указывается на нужный фрагмент. Никогда не оформляйте так комментарии!

Во-вторых, во многих главах слишком описывается совсем не то, что ожидаешь там увидеть. Например, о чём может быть глава о взаимодействии облачных служб? Ну никак не ожидаешь там увидеть разделы о различиях между HTTP 1, 1.1 и 2. Да и примеры использования Protubuf тоже не в тему.

В дополнение по специальной ссылке можно скачать архив со всеми примерами программ на Go.

Уже во второй главе книги рассматриваются библиотеки и фреймворки для построения сложных консольных приложений с множеством аргументов и опций. Также рассматриваются общепринятые варианты работы с конфигурационными файлами. При этом речь идёт не только о стандартной библиотеке языка, как это принято в справочных руководствах и заумных книгах, но также и признанные разработки внутри Go-сообщества выложенные на Github.

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

По сути книга является огромным 350+ страничным тотуриалом, которые были особо популярны в начале 2000. Как правило, в каждой теме рассматриваются 2-3 способа решения возникшей задачи, но можно не тратить время и сразу смотреть финальный вариант. Скорее всего именно этот вариант подойдёт лучше всего!

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

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

Третья часть мне показалась самой скучной и занудной, т.к. В ней целых 3 главы посвящено разработке сайтов на Go Lang. На мой взгляд язык Go наиболее интересен для backend и highload разработчиков, поэтому работа с HTML-шаблонами, электронной почты и обработка web-форм выглядят весьма неуместно. И лишь в конце заходит речь о разработке веб-сервисов и REST API.

Четвёртая часть, пожалуй самая интересная! Ведь в ней рассматриваются вопросы разработки и эксплуатации Go-приложений на облачных серверах и взаимодействия с другими облачными сервисами. А завершается книга главой о рефлексии и автоматической генерации кода.

К сожалению, книга имеет достаточно малый объём и в ней рассмотрены далеко не все темы. Среди описанных тем не всегда достаточна глубина рассмотрения вопроса. Часть советов же вобще очевидны и будут полезны только начинающих разработчикам. Перевод в некоторых местах кривой, некоторые фразы переведены коряво и не канонично (одни микрослужбы вызывают невиданный баттхёрт) и приходится их перечитывать повторно. Также присутствует несколько грубых опечаток.

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