راهنمای کامل برنامهنویسی با Go: نرمافزار قابل اعتماد و کارآمد
Pro Go Полное руководство по программированию надежного и эффективного программного обеспечения с использованием Golang
معرفی کتاب «راهنمای کامل برنامهنویسی با Go: نرمافزار قابل اعتماد و کارآمد» (با عنوان لاتین Pro Go Полное руководство по программированию надежного и эффективного программного обеспечения с использованием Golang) نوشتهٔ Адам Фриман، منتشرشده توسط نشر Apress : Imprint: Apress در سال 2022. این کتاب در فرمت pdf، زبان انگلیسی ارائه شده است.
Pro Go Полное руководство по программированию надежного и эффективного программного обеспечения с использованием Golang Часть I. Понимание языка Go 1. Ваше первое приложение Go Настройка сцены Установка средств разработки Установка Git Выбор редактора кода Создание проекта Определение типа данных и коллекции Создание HTML-шаблонов Загрузка шаблонов Создание обработчиков HTTP и сервера Написание функции обработки формы Обработка данных формы Добавление проверки данных Резюме 2. Включение Go в контекст Почему вам стоит изучать Go? В чем подвох? Это действительно настолько плохо? Что вы должны знать? Какова структура этой книги? Часть 1: Понимание языка Go Часть 2: Использование стандартной библиотеки Go Часть 3: Применение Go Что не охватывает эта книга? Что делать, если вы нашли ошибку в книге? Много ли примеров? Какое программное обеспечение вам нужно для примеров? На каких платформах будут работать примеры? Что делать, если у вас возникли проблемы с примерами? Где взять пример кода? Почему некоторые примеры имеют странное форматирование? Как связаться с автором? Что, если мне действительно понравилась эта книга? Что, если эта книга меня разозлила, и я хочу пожаловаться? Резюме 3. Использование инструментов Go Использование команды Go Создание проекта Go Понимание объявления пакета Понимание оператора импорта Понимание функции Понимание оператора кода Компиляция и запуск исходного кода Очистка Использование команды go run Определение модуля Отладка кода Go Подготовка к отладке Использование отладчика Использование подключаемого модуля редактора Delve Линтинг Go-кода Использование линтера Отключение правил линтера Создание конфигурационного файла линтера Исправление распространенных проблем в коде Go Форматирование кода Go Резюме 4. Основные типы, значения и указатели Подготовка к этой главе Использование стандартной библиотеки Go Понимание основных типов данных Понимание литеральных значений Использование констант Понимание нетипизированных констант Определение нескольких констант с помощью одного оператора Пересмотр литеральных значений Использование переменных Пропуск типа данных переменной Пропуск присвоения значения переменной Определение нескольких переменных с помощью одного оператора Использование краткого синтаксиса объявления переменных Использование краткого синтаксиса переменных для переопределения переменных Использование пустого идентификатора Понимание указателей Определение указателя Следование указателю Понимание нулевых значений указателя Указывание на указатели Понимание того, почему указатели полезны Резюме 5. Операции и преобразования Подготовка к этой главе Понимание операторов Go Понимание операторов Go Понимание арифметического переполнения Использование оператора остатка от деления Использование операторов инкремента и декремента Объединение строк Понимание операторов сравнения Сравнение указателей Понимание логических операторов Преобразование, анализ и форматирование значений Выполнение явных преобразований типов Понимание ограничений явных преобразований Преобразование значений с плавающей запятой в целые числа Парсинг из строк Разбор целых чисел Разбор двоичных, восьмеричных и шестнадцатеричных целых чисел Использование удобной целочисленной функции Разбор чисел с плавающей запятой Форматирование значений как строк Форматирование логических значений Форматирование целочисленных значений Использование удобной целочисленной функции Форматирование значений с плавающей запятой Резюме 6. Управление потоком выполнения Подготовка к этой главе Понимание управления потоком выполнения Использование операторов if Использование ключевого слова else Понимание области действия оператора if Использование оператора инициализации с оператором if Использование циклов for Включение условия в цикл Использование операторов инициализации и завершения Продолжение цикла Перечисление последовательностей Получение только индексов или значений при перечислении последовательностей Перечисление встроенных структур данных Использование операторов switch Сопоставление нескольких значений Прекращение выполнения оператора case Принудительный переход к следующему оператору case Предоставление пункта по умолчанию Использование оператора инициализации Исключение значения сравнения Использование операторов меток Резюме 7. Использование массивов, срезов и карт Подготовка к этой главе Работа с массивами Использование литерального синтаксиса массива Понимание типов массивов Понимание значений массива Сравнение массивов Перечисление массива Работа со срезами Добавление элементов в срез Выделение дополнительной емкости срезов Добавление одного среза к другому Создание срезов из существующих массивов Добавление элементов при использовании существующих массивов для срезов Указание емкости при создании среза из массива Создание срезов из других срезов Использование функции копирования Использование функции копирования для обеспечения разделения массива срезов Понимание ловушки неинициализированных срезов Указание диапазонов при копировании срезов Копирование срезов разного размера Удаление элементов среза Перечисление срезов Сортировка срезов Сравнение срезов Получение массива, лежащего в основе среза Работа с картами Использование литерального синтаксиса карты Проверка элементов в карте Удаление объектов с карты Перечисление содержимого карты Перечисление карты по порядку Понимание двойной природы строк Преобразование строки в руны Перечисление строк Резюме 8. Определение и использование функций Подготовка к этой главе Определение простой функции Определение и использование параметров функции Пропуск типов параметров Пропуск имен параметров Определение вариационных параметров Работа без аргументов для вариационного параметра Использование срезов в качестве значений переменных параметров Использование указателей в качестве параметров функций Определение и использование результатов функции Возврат функцией нескольких результатов Использование нескольких результатов вместо нескольких значений Использование именованных результатов Использование пустого идентификатора для сброса результатов Использование ключевого слова defer Резюме 9. Использование функциональных типов Подготовка к этой главе Понимание типов функций Понимание сравнения функций и нулевого типа Использование функций в качестве аргументов Использование функций в качестве результатов Создание псевдонимов функциональных типов Использование литерального синтаксиса функции Понимание области действия функциональной переменной Непосредственное использование значений функций Понимание замыкания функции Понимание оценки замыкания Принудительная ранняя оценка Замыкание по указателю для предотвращения ранней оценки Резюме 10. Определение сруктур Подготовка к этой главе Определение и использование структуры Создание структурных значений Использование значения структуры Частичное присвоение значений структуры Использование позиций полей для создания значений структуры Определение встроенных полей Сравнение значений структуры Преобразование между типами структур Определение анонимных типов структур Создание массивов, срезов и карт, содержащих структурные значения Понимание структур и указателей Понимание удобного синтаксиса указателя структуры Понимание указателей на значения Понимание функций конструктора структуры Использование типов указателей для полей структуры Общие сведения о копировании поля указателя Понимание нулевого значения для структур и указателей на структуры Резюме 11. Использование методов и интерфейсов Подготовка к этой главе Определение и использование методов Определение параметров метода и результатов Понимание перегрузки метода Понимание получателей указателей и значений Определение методов для псевдонимов типов Размещение типов и методов в отдельных файлах Определение и использование интерфейсов Определение интерфейса Реализация интерфейса Использование интерфейса Использование интерфейса в функции Использование интерфейса для полей структуры Понимание эффекта приемников метода указателя Сравнение значений интерфейса Выполнение утверждений типа Тестирование перед выполнением утверждения типа Включение динамических типов Использование пустого интерфейса Использование пустого интерфейса для параметров функций Резюме 12. Создание и использование пакетов Подготовка к этой главе Понимание файла модуля Создание пользовательского пакета Использование пользовательского пакета Понимание управления доступом к пакетам Добавление файлов кода в пакеты Разрешение конфликтов имен пакетов Использование псевдонима пакета Использование точечного импорта Создание вложенных пакетов Использование функций инициализации пакета Импорт пакета только для эффектов инициализации Использование внешних пакетов Управление внешними пакетами Резюме 13. Тип и композиция интерфейса Подготовка к этой главе Понимание композиции типов Определение базового типа Определение конструктора Типы композиций Создание цепочки вложенных типов Использование нескольких вложенных типов в одной и той же структуре Понимание, когда продвижение не может быть выполнено Понимание неоднозначности продвижения Понимание композиции и интерфейсов Использование композиции для реализации интерфейсов Понимание ограничения переключения типа Составление интерфейсов Резюме 14. Использование горутин и каналов Подготовка к этой главе Понимание того, как Go выполняет код Создание дополнительных горутин Возврат результатов из горутин Отправка результата с использованием канала Получение результата с использованием канала Работа с каналами Координация каналов Использование буферизованного канала Проверка буфера канала Отправка и получение неизвестного количества значений Закрытие канала Перечисление значений канала Ограничение направления канала Ограничение направления аргумента канала Использование операторов select Получение без блокировки Прием с нескольких каналов Отправка без блокировки Отправка на несколько каналов Резюме 15. Обработка ошибок Подготовка к этой главе Работа с исправимыми ошибками Генерация ошибок Сообщение об ошибках через каналы Использование удобных функций обработки ошибок Работа с неисправимыми ошибками Восстановление после паники Паника после восстановления Восстановление после паники в горутинах Резюме Часть IIИспользование стандартной библиотеки Go 16. Обработка строк и регулярные выражения Подготовка к этой главе Обработка строк Сравнение строк Преобразование регистра строк Работа с регистром символов Проверка строк Проверка строк с помощью пользовательских функций Манипулирование строками Разделение строк Ограничение количества результатов Разделение на пробельные символы Разделение с использованием пользовательской функции для разделения строк Обрезка строк Обрезка пробелов Обрезка наборов символов Обрезка подстрок Обрезка с помощью пользовательских функций Изменение строк Изменение строк с помощью функции карты Map Использование заменителя строк Построение и генерация строк Строительные строки Использование регулярных выражений Компиляция и повторное использование шаблонов Разделение строк с помощью регулярного выражения Использование подвыражений Использование именованных подвыражений Замена подстрок с помощью регулярного выражения Замена совпадающего контента функцией Резюме 17. Форматирование и сканирование строк Подготовка к этой главе Написание строк Форматирование строк Понимание глаголов форматирования Использование глаголов форматирования общего назначения Управление форматированием структуры Использование команд целочисленного форматирования Использование глаголов форматирования значений с плавающей запятой Использование глаголов форматирования строк и символов Использование глагола форматирования логических значений Использование глагола форматирования указателя Сканирование строк Работа с символами новой строки Использование другого источника строк Использование шаблона сканирования Резюме 18. Математические функции и сортировка данных Подготовка к этой главе Работа с числами Генерация случайных чисел Генерация случайного числа в определенном диапазоне Перетасовка элементов Сортировка данных Сортировка числовых и строковых срезов Поиск отсортированных данных Сортировка пользовательских типов данных Сортировка с использованием разных полей Определение функции сравнения Резюме 19. Даты, время и продолжительность Подготовка к этой главе Представление дат и времени Представление дат и времени Форматирование времени как строк Разбор значений времени из строк Использование предопределенных макетов даты Указание разбора местоположения Использование локального местоположения Непосредственное указание часовых поясов Управление значениями времени Представление продолжительности Создание продолжительности относительно времени Создание длительности из строк Использование функций времени для горутин и каналов Перевод горутины в сон Отсрочка выполнения функции Получение уведомлений по времени Использование уведомлений в качестве тайм-аутов в операторах Select Остановка и сброс таймеров Получение повторяющихся уведомлений Резюме 20. Чтение и запись данных Подготовка к этой главе Понимание средств чтения и записи Понимание средств чтения Понимание средств записи Использование служебных функций для программ чтения и записи Использование специализированных средств чтения и записи Использование пайпов Улучшение примера Объединение нескольких средств чтения Объединение нескольких средств записи Повторение данных чтения во Writer Ограничение чтения данных Буферизация данных Использование дополнительных методов буферизованного чтения Выполнение буферизованной записи Форматирование и сканирование с помощью средств чтения и записи Сканирование значений из считывателя Запись отформатированных строк в Writer Использование Replacer с Writer Резюме 21. Работа с данными JSON Подготовка к этой главе Чтение и запись данных JSON Кодирование данных JSON Кодирование массивов и срезов Кодирование карт Кодирование структур Понимание эффекта продвижения в JSON при кодировании Настройка JSON-кодирования структур Пропуск поля Пропуск неназначенных полей Принудительное кодирование полей как строк Интерфейсы кодирования Создание полностью настраиваемых кодировок JSON Декодирование данных JSON Расшифровка числовых значений Указание типов для декодирования Декодирование массивов Декодирование карт Декодирование структур Запрет неиспользуемых ключей Использование структурных тегов для управления декодированием Создание полностью настраиваемых декодеров JSON Резюме 22. Работа с файлами Подготовка к этой главе Чтение файлов Использование функции удобства чтения Декодирование данных JSON Использование файловой структуры для чтения файла Чтение из определенного места Запись в файлы Использование функции удобства записи Использование файловой структуры для записи в файл Запись данных JSON в файл Использование удобных функций для создания новых файлов Работа с путями к файлам Управление файлами и каталогами Изучение файловой системы Определение существования файла Поиск файлов с помощью шаблона Обработка всех файлов в каталоге Резюме 23. Использование HTML и текстовых шаблонов Подготовка к этой главе Создание HTML-шаблонов Загрузка и выполнение шаблонов Загрузка нескольких шаблонов Перечисление загруженных шаблонов Поиск определенного шаблона Понимание действий шаблона Вставка значений данных Форматирование значений данных Цепочки и скобки шаблонных выражений Обрезка пробелов Использование срезов в шаблонах Использование встроенных функций среза Условное выполнение содержимого шаблона Использование дополнительных условных действий Создание именованных вложенных шаблонов Определение блоков шаблона Определение функций шаблона Отключение кодирования результата функции Предоставление доступа к функциям стандартной библиотеки Определение переменных шаблона Использование переменных шаблона в действиях диапазона Создание текстовых шаблонов Резюме 24. Создание HTTP-серверов Подготовка к этой главе Создание простого HTTP-сервера Создание прослушивателя и обработчика HTTP Проверка запроса Фильтрация запросов и генерация ответов Использование удобных функций ответа Использование обработчика удобной маршрутизации Поддержка HTTPS-запросов Перенаправление HTTP-запросов на HTTPS Создание статического HTTP-сервера Создание статического маршрута к файлу Использование шаблонов для генерации ответов Ответ с данными JSON Обработка данных формы Чтение данных формы из запросов Чтение составных форм Получение нескольких файлов в форме Чтение и настройка файлов cookie Резюме 25. Создание HTTP-клиентов Подготовка к этой главе Отправка простых HTTP-запросов Отправка POST-запросов Публикация формы с помощью ридера Настройка запросов HTTP-клиента Использование удобных функций для создания запроса Работа с файлами cookie Создание отдельных клиентов и файлов cookie Управление перенаправлениями Создание составных форм Резюме 26. Работа с базами данных Подготовка к этой главе Подготовка базы данных Установка драйвера базы данных Открытие базы данных Выполнение операторов и запросов Запрос нескольких строк Понимание метода сканирования Понимание того, как можно сканировать значения SQL Сканирование значений в структуру Выполнение операторов с заполнителями Выполнение запросов для отдельных строк Выполнение других запросов Использование подготовленных операторов Использование транзакций Использование рефлексии для сканирования данных в структуру Резюме 27. Использование рефлексии Подготовка к этой главе Понимание необходимости рефлексии Использование рефлексии Использование основных функций типа Использование базовых возможностей Value Определение типов Идентификация байтовых срезов Получение базовых значений Установка Value с использованием рефлексии Установка одного Value с помощью другого Сравнение Value Использование удобной функции сравнения Преобразование значений Преобразование числовых типов Создание новых значений Резюме 28. Использование рефлексии, часть 2 Подготовка к этой главе Работа с указателями Работа со значениями указателя Работа с типами массивов и срезов Работа со значениями массива и среза Перечисление срезов и массивов Создание новых срезов из существующих срезов Создание, копирование и добавление элементов в срезы Работа с типами карт Работа со значениями карты Установка и удаление значений карты Создание новых карт Работа с типами структур Обработка вложенных полей Поиск поля по имени Проверка тегов структуры Создание типов структур Работа со структурными значениями Установка значений поля структуры Резюме 29. Использование отражения, часть 3 Подготовка к этой главе Работа с типами функций Работа со значениями функций Создание и вызов новых типов функций и значений Работа с методами Вызов методов Работы с интерфейсами Получение базовых значений из интерфейсов Изучение методов интерфейса Работа с типами каналов Работа со значениями канала Создание новых типов и значений каналов Выбор из нескольких каналов Резюме 30. Координация горутин Подготовка к этой главе Использование групп ожидания Использование взаимного исключения Использование мьютекса чтения-записи Использование условий для координации горутин Обеспечение однократного выполнения функции Использование контекстов Отмена запроса Установка крайнего срока Предоставление данных запроса Резюме 31. Модульное тестирование, бенчмаркинг и ведение журнала Подготовка к этой главе Использование тестирования Запуск модульных тестов Запуск определенных тестов Управление выполнением теста Пропуск тестов Код бенчмаркинга Удаление установки из теста Выполнение суббенчмаркингов Журналирование ланных Создание пользовательских регистраторов Резюме Часть IIIПрименение Go 32. Создание веб-платформы Создание проекта Создание некоторых основных функций платформы Создание системы ведения журнала Создание системы конфигурации Определение файла конфигурации Реализация интерфейса конфигурации Использование системы конфигурации Управление службами с внедрением зависимостей Определение жизненных циклов сервиса Определение внутренних сервисных функций Определение функций регистрации службы Определение функций разрешения службы Регистрация и использование сервисов Добавление поддержки для вызова функций Добавление поддержки разрешения полей структуры Резюме 33. Промежуточное ПО, шаблоны и обработчики Создание конвейера запросов Определение интерфейса компонента промежуточного программного обеспечения Создание конвейера запросов Создание базовых компонентов Создание сервисов компонента ПО промежуточного слоя Создание компонента ПО промежуточного слоя ведения журналов Создание компонента обработки ошибок Создание компонента статического файла Создание компонента ответа-заполнителя Создание HTTP-сервера Настройка приложения Оптимизация разрешения сервиса Создание HTML-ответов Создание макета и шаблона Реализация выполнения шаблона Создание и использование службы шаблонов Знакомство с обработчиками запросов Генерация URL-маршрутов Подготовка значений параметров для метода обработчика Сопоставление запросов с маршрутами Резюме 34. Действия, сеансы и авторизация Представляем результаты действий Определение общих результатов действий Обновление заполнителей для использования результатов действий Вызов обработчиков запросов из шаблонов Обновление обработки запросов Настройка приложения Создание URL-адресов из маршрутов Создание службы генератора URL Определение альтернативных маршрутов Проверка данных запроса Выполнение проверки данных Добавление сеансов Отсрочка записи данных ответа Создание интерфейса сеанса, службы и промежуточного программного обеспечения Создание обработчика, использующего сеансы Настройка приложения Добавление авторизации пользователя Определение основных типов авторизации Реализация интерфейсов платформы Реализация контроля доступа Реализация функций заполнителя приложения Создание обработчика аутентификации Настройка приложения Резюме 35. SportsStore: настоящее приложение Создание проекта SportsStore Настройка приложения Запуск модели данных Определение интерфейса репозитория Реализация (временного) репозитория Отображение списка продуктов Создание шаблона и макета Настройка приложения Добавление пагинации Стилизация содержимого шаблона Установка CSS-файла Bootstrap Обновление макета Стилизация содержимого шаблона Добавление поддержки фильтрации категорий Обновление обработчика запросов Создание обработчика категории Отображение навигации по категориям в шаблоне списка товаров Регистрация обработчика и обновление псевдонимов Резюме 36. SportsStore: корзина и база данных Создание корзины покупок Определение модели корзины и репозитория Создание обработчика запроса корзины Добавление товаров в корзину Настройка приложения Добавление виджета «Сводка корзины» Вызов обработчика и добавление таблицы стилей значков CSS Использование репозитория базы данных Создание типов репозиториев Открытие базы данных и загрузка команд SQL Определение начального числа и операторов инициализации Определение основных запросов Определение файлов SQL для базовых запросов Определение постраничных запросов Определение службы репозитория SQL Настройка приложения для использования репозитория SQL Резюме 37. SportsStore: оформление заказа и администрирование Создание процесса оформления заказа Определение модели Расширение репозитория Отключение временного репозитория Определение методов и команд репозитория Определение файлов SQL Реализация методов репозитория Создание обработчика запросов и шаблонов Интеграция процесса оформления заказа Регистрация обработчика запросов Создание функций администрирования Создание функции администрирования продукта Расширение репозитория Реализация обработчика запросов продуктов Создание функции администрирования категорий Расширение репозитория Реализация обработчика запроса категории Резюме 38. SportsStore: завершение и развертывание Завершение функций администрирования Расширение репозитория Реализация обработчиков запросов Создание шаблонов Ограничение доступа к функциям администрирования Создание пользовательского хранилища и обработчика запросов Настройка приложения Создание веб-службы Подготовка к развертыванию Установка сертификатов Настройка приложения Сборка приложения Установка рабочего стола Docker Creating the Docker Configuration Files Резюме Best-selling author Adam Freeman explains how to get the most from Go, starting from the basics and building up to the most advanced and sophisticated features. You will learn how Go builds on a simple and consistent type system to create a comprehensive and productive development experience that produces fast and robust applications that run across platforms. Go, also known as Golang, is the concise and efficient programming language designed by Google for creating high-performance, cross-platform applications. Go combines strong static types with simple syntax and a comprehensive standard library to increase programmer productivity, while still supporting features such as concurrent/parallel programming. Each topic is covered in a clear, concise, no-nonsense approach that is packed with the details you need to learn to be truly effective. Chapters include common problems and how to avoid them. What You Will Learn Gain a solid understanding of the Go language and tools Gain in-depth knowledge of the Go standard library Use Go for concurrent/parallel tasks Use Go for client- and server-side development Who This Book Is For This book is for experienced developers who want to use Go to create applications. Adam Freeman is an experienced IT professional who has held senior positions in a range of companies, most recently serving as chief technology officer and chief operating officer of a global bank. Now retired, he spends his time writing and long-distance running "Best-selling author Adam Freeman explains how to get the most from Go, starting from the basics and building up to the most advanced and sophisticated features. You will learn how Go builds on a simple and consistent type system to create a comprehensive and productive development experience that produces fast and robust applications that run across platforms. Go, also known as Golang, is the concise and efficient programming language designed by Google for creating high-performance, cross-platform applications. Go combines strong static types with simple syntax and a comprehensive standard library to increase programmer productivity, while still supporting features such as concurrent/parallel programming. Each topic is covered in a clear, concise, no-nonsense approach that is packed with the details you need to learn to be truly effective. Chapters include common problems and how to avoid them"-- Amazon
دانلود کتاب راهنمای کامل برنامهنویسی با Go: نرمافزار قابل اعتماد و کارآمد