Язык программирования Go

Александр Шитик
Александр Шитик

Пишу свои посты и книги, делаю обзоры на фильмы и книги. Эксперт в области космологии и астрономии, IT, продуктивности и планирования.

Язык программирования Go
А. Донован Б. Керниган
Жанры: Программирование
Год издания: 2016
Год прочтения: 2020
Моя оценка: Наивысшая
Количество прочтений: 1
Количество страниц: 436
Конспект (страниц): 0
Первоначальный язык издания: Английский
Переводы на другие языки: Русский, Португальский, Китайский

Сначала кратко разберу структуру книги по главам, после чего напишу вывод, а также перечислю плюсы и минусы книги.

Учебник

Это ознакомительная глава по работе с языком Go. Рассказывается о происхождении языка, приводится пример hello world, рассматриваются запуск и компиляция, концепция модулей (пакетов), объявление функций, форматирование кода, работа с аргументами командной строки, объявление переменных, краткое знакомство с for. Также разбирается поиск повторяющихся строк несколькими способами, работа с изображениями и URL, и даже создание примитивного веб-сервера.

Структура программы

Разбираются зарезервированные слова, именование переменных, функций и констант. Описывается, как объявлять переменные (через var, const, type, func), какие части можно опускать и как группировать несколько объявлений. Подробно рассмотрены указатели и создание переменных через функцию new. Затронута тема времени жизни и области видимости переменных, а также присваивания значений. Также показано использование внешних пакетов, подключение и инкапсуляция данных.

Фундаментальные типы данных

Рассматриваются числа (целые, с плавающей точкой), бинарные и побитовые операторы и их приоритет, сравнение чисел. Описана работа с комплексными числами в Go, булевыми значениями. Разбираются строки, управляющие последовательности и строковые литералы, руны — для работы с Unicode-символами. Приводится преобразование строк в числа и обратно. Также рассматриваются константы и псевдо-enum-ы.

Составные типы данных

Здесь речь идет о более сложных типах данных: массивах (последовательности фиксированной длины), срезах (динамические последовательности), отображениях (map — коллекция пар ключ-значение) и структурах. Рассматриваются создание, инициализация, сравнение и основные функции для работы с массивами и срезами. Приводится несколько примеров работы с отображениями. Структуры подробно разобраны, включая работу с JSON и использование функций Marshal и Unmarshal. В завершение — пример работы с HTML посредством Go.

Функции

Достаточно подробный раздел о функциях. В начале — теоретический материал, затем — пример рекурсивной обработки HTML. Разбирается возврат нескольких значений и одна из ключевых концепций языка — проверка ошибок через if err != nil. Подробно рассмотрены анонимные функции и вариативные функции (принимающие переменное количество параметров).

Методы

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

Интерфейсы

Глава о создании и использовании интерфейсов. В начале — теоретическая часть, объясняющая назначение интерфейсов и способы их реализации. Из стандартных интерфейсов рассмотрены интерфейсы для сортировки, работы с веб-сервером и обработки ошибок. Также поднимаются темы декларации типов и обработки аварийных ситуаций. Если ранее был пример с JSON, то здесь уже рассматривается работа с XML.

Go-подпрограммы и каналы. Параллельность

Следуют две главы, посвящённые параллельному программированию. В первой — больше теории и примеров, включая фундаментальную тему Go — каналы (в том числе буферизированные и однонаправленные) и конструкция select.

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

Пакеты и инструменты Go

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

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

Тестирование

Одна из последних глав посвящена тестированию кода средствами Go (go test), кратко описанному в предыдущей главе. Упоминаются сторонние библиотеки для тестирования. В остальном глава типична: зачем нужны тесты, как правильно и неправильно писать, что такое хрупкие тесты, покрытие кода тестами и прочее.

Рефлексия и низкоуровневое программирование

Две завершающие, самые короткие главы. Они ориентированы на более опытных разработчиков. Первая — про рефлексию: например, если нужно создать собственный статический анализатор или инструмент для анализа кода. Вторая — про низкоуровневое программирование: когда возможностей самого Go недостаточно, и приходится обращаться к библиотекам C или использовать вызовы ОС.

Вывод

Для кого эта книга подойдет?

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

Плюсу:

  • Легко и понятно читается.
  • Четкая структура: каждая следующая глава логически продолжает предыдущую.
  • Много примеров кода.
  • После каждой главы — практические упражнения.

Минусы:

  • Не уверен, выходили ли обновления книги, но на момент чтения не были покрыты некоторые новые возможности языка, такие как generics.
  • Объем книги — 400+ страниц, что может быть барьером для тех, кто не привык читать техническую литературу такого объема.
Вверх