وبلاگ بلیان

گو: идиомы و الگوهای طراحی

Go: идиомы и паттерны проектирования

جلد کتاب گو: идиомы و الگوهای طراحی

معرفی کتاب «گو: идиомы و الگوهای طراحی» (با عنوان لاتین Go: идиомы и паттерны проектирования) نوشتهٔ Джон Боднер، منتشرشده توسط نشر "Издательский дом ""Питер""" در سال 2022. این کتاب در فرمت pdf، زبان ru ارائه شده است.

Целевая аудитория — разработчики, желающие изучить второй (или пятый) язык программирования. Она подойдет как новичкам, которые знают лишь то, что у Go есть забавный талисман, так и тем, кто уже успел прочитать краткое руководство по этому языку или даже написать на нем несколько фрагментов кода. Эта книга не просто рассказывает, как следует писать программы на Go, она показывает, как можно делать это идиоматически. Более опытные Go-разработчики найдут здесь советы по использованию новых возможностей языка. Предполагается, что читатель уже умеет пользоваться таким инструментом разработчика, как система контроля версий (желательно Git) и IDE. Читатель должен быть знаком с такими базовыми понятиями информатики, как конкурентность и абстракция, поскольку в книге мы будем касаться этих тем применительно к Go. Одни примеры кода можно скачать с GitHub, а десятки других — запустить в онлайн-песочнице The Go Playground. Наличие соединения с интернетом необязательно, однако с ним будет проще изучать исполняемые примеры кода. Поскольку язык Go часто используется для создания и вызова HTTP-серверов, для понимания некоторых примеров читатель должен иметь общее представление о протоколе HTTP и связанных с ним концепциях. Предисловие Для кого написана книга Условные обозначения Использование примеров программного кода Благодарности От издательства Глава 1. Настройка среды разработки для языка Go Установка средств разработки для языка Go Рабочее пространство Go Команда go Команды go run и go build Установка сторонних инструментов для Go Форматирование кода Выбор инструментов Visual Studio Code GoLand Онлайн-песочница make-файлы Обновление средств разработки Резюме Глава 2. Простые типы и объявление переменных Встроенные типы Нулевое значение Литералы Логические значения Числовые типы Пробуем использовать строки и руны Явное преобразование типов var или := Использование ключевого слова const Типизированные и нетипизированные константы Неиспользуемые переменные Именование переменных и констант Резюме Глава 3. Составные типы Массивы — слишком строгие для того, чтобы использовать их напрямую Срезы Функция len Функция append Емкость среза Функция make Объявление собственного среза Срезание срезов Преобразование массивов в срезы Функция copy Строки в сочетании с рунами и байтами Карты Чтение и запись карты Идиома «запятая-ok» Удаление из карты Использование карты в качестве множества Структуры Анонимные структуры Сравнение и преобразование структур Резюме Глава 4. Блоки, затенение переменных и управляющие конструкции Блоки Затенение переменных Выявление затененных переменных Оператор if Четыре вида оператора for Полный оператор for Оператор for, использующий только условие Бесконечный оператор for Ключевые слова break и continue Оператор for-range Операторы for с метками Выбор подходящего оператора for Оператор switch Пустые переключатели Что лучше выбрать: if или switch? Оператор goto Резюме Глава 5. Функции Объявление и вызов функций Имитация именованных и опциональных параметров Вариативные входные параметры и срезы Возврат нескольких значений При возврате нескольких значений всегда возвращается несколько значений Игнорирование возвращаемых значений Именованные возвращаемые значения Никогда не используйте пустые операторы возврата! Функции являются значениями Объявление функциональных типов Анонимные функции Замыкания Передача функций в качестве параметров Возвращение функций из функций Оператор defer Go — язык с передачей параметров по значению Резюме Глава 6. Указатели Общие сведения об указателях Не бойтесь указателей Указатели служат для указания изменяемых параметров Указатели — это крайняя мера Влияние передачи указателей на производительность Различие между нулевым значением и отсутствием значения Различие между картами и срезами Использование срезов в качестве буферов Уменьшение нагрузки на сборщик мусора Резюме Глава 7. Типы, методы и интерфейсы Типы в Go Методы Приемники указателей и приемники значений Пишите код методов с расчетом на экземпляр, равный nil Методы тоже являются функциями Функции или методы? Объявление типа не является наследованием Типы являются исполняемой документацией Йота (иногда) используется для создания перечислений Используйте встраивание для реализации композиции Встраивание не является наследованием Общее представление об интерфейсах Интерфейсы обеспечивают типобезопасную утиную типизацию Встраивание и интерфейсы Принимайте интерфейсы, возвращайте структуры Интерфейсы и значение nil Пустой интерфейс ничего не сообщает Утверждения типа и переключатели типа Используйте утверждения типа и переключатели типа как можно реже Функциональные типы — ключ к интерфейсам Неявные интерфейсы облегчают внедрение зависимостей Утилита Wire Go нельзя назвать объектно-ориентированным языком (и это здорово!) Резюме Глава 8. Ошибки Как обрабатывать ошибки: основы Используйте строки в случае простых ошибок Сигнальные ошибки Ошибки являются значениями Обертывание ошибок Функции Is и As Обертывание ошибок с помощью оператора defer Функции panic и recover Извлечение трассировки стека из ошибки Резюме Глава 9. Модули, пакеты и операции импорта Репозитории, модули и пакеты Файл go.mod Компиляция пакетов Операции импорта и экспорта Создание и использование пакета Именование пакетов Как следует подходить к организации кода модуля Переопределение имени пакета Комментарии пакета и godoc Пакет internal По возможности не используйте функцию init Циклические зависимости Переименование и реорганизация API без потери работоспособности Работа с модулями Импортирование стороннего кода Работа с версиями Выбор минимальной версии Обновление до совместимых версий Обновление до несовместимых версий Вендоринг Сайт pkg.go.dev Дополнительная информация Публикация своего модуля Версионирование своего модуля Прокси-серверы модулей Указание прокси-сервера Закрытые репозитории Резюме Глава 10. Конкурентность в Go Когда следует использовать конкурентность Горутины Каналы Чтение, запись и буферизация Цикл for-range и каналы Закрытие канала Различия в поведении каналов Оператор select Принципы и паттерны конкурентного программирования Следите за тем, чтобы конкурентности не было в ваших API Горутины, циклы for и изменяющиеся переменные Всегда закрывайте горутины Паттерн на основе канала done Прекращение выполнения горутины с помощью функции отмены Когда следует использовать буферизованные и небуферизованные каналы Противодавление Отключение ветвей оператора select Как можно установить тайм-аут для кода Использование типа WaitGroup Однократное выполнение кода Собираем инструменты для обеспечения конкурентности Когда вместо каналов следует использовать мьютексы Атомарные операции — скорее всего, они вам не понадобятся Где можно найти более подробную информацию о конкурентности Резюме Глава 11. Стандартная библиотека Пакет io и его друзья Пакет time Монотонное время Таймеры и тайм-ауты Пакет encoding/json Используйте теги структур для добавления метаданных Демаршализация и маршализация JSON, считыватели и записыватели Кодирование и декодирование JSON-потоков Парсинг пользовательского формата JSON Пакет net/http Клиент Сервер Промежуточный слой Резюме Глава 12. Контекст Что такое контекст Отмена Таймеры Управление отменой контекста в собственном коде Значения Резюме Глава 13. Написание тестов Основы тестирования Выдача сообщения о неудачном завершении теста Подготовка и заключительная «уборка» Расположение образцов тестовых данных Кэширование результатов теста Тестирование своего публичного API Используйте модуль go-cmp для сравнения результатов тестов Табличные тесты Проверка степени покрытия кода Сравнительные тесты Заглушки в Go Пакет httptest Интеграционные тесты и теги сборки Выявление проблем конкурентности с помощью детектора состояний гонки Резюме Глава 14. Здесь водятся драконы: пакеты reflect, unsafe и cgo Рефлексия позволяет нам работать с типами на этапе выполнения Типы, разновидности и значения Создание новых значений Используйте рефлексию для проверки значения интерфейса на равенство значению nil Используйте рефлексию для создания маршализатора данных Создавайте с помощью рефлексии функции для автоматизации повторяющихся задач Рефлексию можно использовать для создания структур, но лучше этого не делать Рефлексия не позволяет создавать методы Используйте рефлексию только тогда, когда в этом есть смысл Использовать пакет unsafe небезопасно Используйте пакет unsafe для преобразования внешних двоичных данных Пакет unsafe в сочетании со строками и срезами Вспомогательные инструменты для пакета unsafe Пакет cgo предназначен для обеспечения интеграции, а не повышения производительности Резюме Глава 15. Взгляд в будущее: обобщенные типы в Go Обобщенные типы уменьшают количество повторяющегося кода и повышают типобезопасность Добавление обобщенных типов в Go Используйте списки типов для определения операторов Обобщенные функции абстрагируют алгоритмы Списки типов накладывают ограничения на константы и реализации Что остается «за бортом» Идиоматический Go-код и обобщенные типы Какие нововведения нас ожидают Резюме Об авторе Об обложке
دانلود کتاب گو: идиомы و الگوهای طراحی