От издательства....24
О научном редакторе русскоязычного издания....24
Иллюстрация на обложке....23
Об авторах....22
Благодарности....16
Предисловие....14
О книге....18
Кому стоит прочитать эту книгу....18
Структура издания....18
О коде....20
Дополнительные онлайн-ресурсы....21
Часть I. Основы языка Go....25
Глава 1. Начало работы с Go....26
1.1. Язык Go....26
1.2. Важные особенности Go....29
1.2.1. Возврат нескольких значений....29
1.2.2. Современная стандартная библиотека....31
1.2.3. Реализация конкурентности с помощью горутин и каналов....34
1.2.4. Инструментарий Go....38
1.3. Место Go среди других языков программирования....45
1.3.1. C и Go....45
1.3.2. Rust, Zig, Nim и Go....47
1.3.3. Java и Go....47
1.3.4. Python, PHP, JavaScript и Go....49
1.4. Первые шаги в работе с Go....51
1.4.1. Установка Go....51
1.4.2. Работа с Git и системами контроля версий....51
1.4.3. Изучение рабочего пространства....52
1.4.4. Переменные окружения....52
1.4.5. Использование ИИ-инструментов вместе с Go....52
1.5. Привет, Go....53
Резюме....55
Глава 2. Создание консольного приложения....56
2.1. Создание CLI-приложений на языке Go....57
2.1.1. Флаги командной строки....57
2.1.2. Определение допустимых значений с помощью перечислений....60
2.1.3. Срезы, массивы и словари....62
2.1.4. Фреймворки для создания консольных приложений....63
2.2. Работа с конфигурацией....69
2.2.1. Использование конфигурационных файлов....70
2.2.2. Передача конфигурации через переменные окружения....75
2.3. Работа с веб-серверами в реальных условиях....77
2.3.1. Запуск и завершение работы сервера....77
2.3.2. Корректное завершение работы с использованием сигналов ОС....78
2.3.3. Маршрутизация веб-запросов....81
Резюме....91
Глава 3. Структуры, интерфейсы и обобщения....92
3.1. Представление данных с помощью пользовательских структур....93
3.1.1. Создание пользовательских структур данных....93
3.1.2. Функции внутри структур....95
3.1.3. Анонимные идентификаторы....98
3.1.4. Структурные теги....98
3.1.5. Преобразование данных в формат JSON....100
3.2. Сравнение Go с функциональными и объектно-ориентированными языками программирования....101
3.3. Расширение функциональности с помощью интерфейсов....106
3.4. Упрощение кода с помощью обобщений....109
3.4.1. Использование функций с обобщениями....112
3.4.2. Использование ограничений и аппроксимации типов....114
Резюме....116
Часть II. Создание надежных приложений....117
Глава 4. Обработка ошибок и паник....118
4.1. Обработка ошибок....119
4.1.1. Рекомендации по работе со значением nil....122
4.1.2. Пользовательские типы ошибок....125
4.1.3. Переменные ошибок....126
4.2. Оборачивание ошибок....129
4.3. Механизм паники....130
4.3.1. Отличие паники от ошибки....130
4.3.2. Обработка паник....132
4.3.3. Восстановление после паники....134
4.3.4. Перехват паники с помощью оператора defer....135
4.3.5. Обработка паник, возникших в горутинах....140
Резюме....148
Глава 5. Конкурентность в Go....149
5.1. Модель конкурентности в Go....150
5.2. Работа с горутинами....151
5.2.1. Ожидание завершения горутин....152
5.2.2. Блокировка с помощью мьютекса....157
5.3. Работа с каналами....162
5.3.1. Использование каналов....163
5.3.2. Закрытие каналов....166
5.3.3. Блокировка с помощью буферизованных каналов....171
Резюме....174
Глава 6. Форматирование, тестирование, отладка и оценка производительности....175
6.1. Поддержание чистоты кода и структуры проекта....176
6.1.1. Форматирование кода....176
6.1.2. Выявление типичных ошибок с помощью go vet....179
6.1.3. Обновление зависимостей....182
6.2. Логирование....182
6.2.1. Отправка логов в разные каналы вывода....186
6.2.2. Структурированное логирование....188
6.2.3. Получение доступа к трассировке стека и ее захват....190
6.3. Модульное тестирование в Go....193
6.3.1. Создание тестового набора с использованием табличного подхода....193
6.3.2. Фаззинг-тестирование....197
6.3.3. Именование тестов....202
6.3.4. Проверка тестового покрытия с помощью go cover....203
6.3.5. Подождите, а где отладчик?....205
6.4. Оценка и оптимизация производительности....205
Резюме....208
Глава 7. Доступ к файлам и основы сетевого взаимодействия....209
7.1. Работа с файлами....210
7.1.1. Чтение файлов....210
7.1.2. Запись в файлы....214
7.2. Организация сетевого взаимодействия через TCP....216
7.2.1. Логирование в сетевой ресурс....216
7.2.2. Обратное давление при сетевом логировании....218
7.3. Основы сетевого взаимодействия по UDP....220
7.4. Веб-сокеты и события, отправляемые сервером....222
7.4.1. Реализация онлайн-чата с использованием веб-сокетов....223
7.4.2. События, отправляемые сервером....229
Резюме....234
Часть III. Создание полноценных веб-приложений....235
Глава 8. Создание HTTP-сервера....236
8.1. Маршрутизация запросов и обработка данных....237
8.1.1. Маршрутизация на основе HTTP-методов....238
8.1.2. Расширение контроля над сервером....243
8.2. Маршрутизация на основе значений, извлеченных из пути запроса....246
8.2.1. Обработка данных POST-запросов и параметров запроса....249
8.2.2. Обработка данных форм....251
8.2.3. Чтение и запись cookie и других заголовков....254
8.2.4. Обработка веб-токенов JSON....257
8.3. Генерация ошибок и базовая аутентификация....259
Резюме....261
Глава 9. HTML-шаблоны и шаблоны электронных писем....262
9.1. Работа с HTML-шаблонами....263
9.1.1. Обзор стандартного пакета для работы с HTML....263
9.1.2. Добавление функциональности в шаблоны....268
9.1.3. Ограничение парсинга шаблонов....271
9.1.4. Когда выполнение шаблона завершается с ошибкой....272
9.1.5. Комбинирование шаблонов....275
9.2. Использование шаблонов для электронных писем....285
Резюме....287
Глава 10. Отправка и получение данных....288
10.1. Раздача статического содержимого....289
10.1.1. Раздача подкаталогов....291
10.1.2. Использование файлового сервера с пользовательскими страницами ошибок....292
10.1.3. Встраивание файлов в исполняемый файл....294
10.1.4. Раздача содержимого из альтернативного местоположения....296
10.2. Продвинутая обработка форм....298
10.2.1. Обработка запросов с данными формы....299
10.2.2. Обращение к нескольким значениям одного поля формы....300
10.2.3. Работа с файлами и отправка составного содержимого....301
10.2.4. Загрузка нескольких файлов....303
10.2.5. Проверка допустимости типа загружаемого файла....305
10.2.6. Инкрементное сохранение загружаемого файла....307
Резюме....311
Глава 11. Работа с внешними сервисами....312
11.1. Использование REST API в качестве полнофункционального клиента....313
11.1.1. Использование HTTP-клиента....313
11.1.2. Обработка ошибок....315
11.2. Обработка и передача ошибок по HTTP....319
11.2.1. Создание пользовательских ошибок....321
11.2.2. Обработка пользовательских ошибок....323
11.3. Парсинг и преобразование данных JSON....325
11.4. Версионирование REST API....329
11.4.1. Версия API в URL-адресе....329
11.4.2. Версия API в типе содержимого....331
11.5. Работа с протоколом gRPC....333
Резюме....338
Часть IV. Go в облаке, микросервисы и другие специализированные темы....339
Глава 12. Облачные приложения и взаимодействие между сервисами....340
12.1. Основы облачных вычислений....341
12.1.1. Модели облачных вычислений....341
12.1.2. Контейнеры и облачно-ориентированные приложения....343
12.2. Микросервисы и обеспечение их высокой доступности....346
12.3. Взаимодействие между сервисами....349
12.3.1. Ускорение REST-взаимодействия....349
12.4. Запуск приложений на облачных серверах....357
12.4.1. Определение среды во время выполнения....358
12.4.2. Сборка приложения для облачной среды....361
12.5. Мониторинг среды выполнения....364
Резюме....366
Глава 13. Рефлексия, генерация кода и продвинутые возможности Go....367
13.1. Три составляющие системы рефлексии....368
13.1.1. Переключение логики на основе типа и вида....369
13.1.2. Проверка реализации интерфейса....373
13.1.3 Анализ полей структуры....377
13.2. Структуры, теги и аннотации....381
13.2.1. Аннотирование структур....381
13.2.2. Использование тегов....383
13.2.3. Обработка тегов в структуре....384
13.3. Генерация кода средствами самого Go....390
13.4. Взаимодействие с кодом на других языках....396
Резюме....398
Итак, вы освоили азы Go, что дальше? Чтобы создавать надежные и готовые к использованию Go-приложения, вам нужно научиться реализовывать конкурентность, налаживать сетевые взаимодействия, получать доступ к файлам, использовать такие нативные протоколы передачи данных, как gRPC и TCP/REST, а также разбираться во множестве практических нюансов. В этой книге приводятся готовые решения, которые можно незамедлительно применить в повседневной работе.
Здесь вы найдете описание десятков техник разработки и сопровождения Go-приложений в формате «проблема — решение — обсуждение». Издание охватывает новейшие возможности языка Go, включая дженерики, обработку паник и ошибок, современные модели конкурентности, а также такие продвинутые темы, как рефлексия и генерация кода. Кроме того, авторы дают полезные советы по интеграции в ваш процесс разработки ИИ-инструментов.