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

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

Go: Идиомы и паттерны проектирования. 2 изд
Автор: Боднер Джон
Дата выхода: 2025
Издательство: Спринт Бук
Количество страниц: 499
Размер файла: 3.3 MB
Тип файла: PDF
Добавил: Aleks-5
 Проверить на вирусы

Предисловие....16

Для кого написана книга....17

Условные обозначения....18

Использование примеров программного кода....19

Благодарности ко второму изданию....19

Благодарности к первому изданию....20

Глава 1. Настройка среды разработки для языка Go....22

Установка средств разработки для языка Go....22

Устранение неполадок при установке Go....23

Инструментарий Go....24

Ваша первая программа на Go....24

Создание модуля Go....24

Команда go build....25

Команда go fmt....26

Команда go vet....29

Выбор инструментов....30

Visual Studio Code....30

GoLand....31

Онлайн-песочница....33

Make-файлы....35

Обязательства по совместимости с Go....36

В курсе последних событий....37

Упражнения....38

Резюме....38

Глава 2. Предописанные типы и объявление переменных....39

Предописанные типы....39

Нулевое значение....39

Литералы....41

Логические значения....43

Числовые типы....43

Пробуем использовать строки и руны....49

Явное преобразование типов....50

Нетипизированные литералы....52

var или :=....52

Использование ключевого слова const....55

Типизированные и нетипизированные константы....57

Неиспользуемые переменные....58

Именование переменных и констант....59

Упражнения....61

Резюме....61

Глава 3. Составные типы....62

Массивы — слишком строгие для того, чтобы использовать их напрямую....62

Срезы....64

Функция len....66

Функция append....66

Емкость среза....67

Функция make....69

Очистка среза....70

Объявление собственного среза....71

Срезание срезов....72

Функция copy....75

Преобразование массивов в срезы....77

Преобразование срезов в массивы....77

Строки в сочетании с рунами и байтами....79

Карты....83

Чтение и запись карты....85

Идиома «запятая-ok»....86

Удаление из карты....87

Очистка карты....87

Сравнение карт....87

Использование карты в качестве множества....88

Структуры....89

Анонимные структуры....92

Сравнение и преобразование структур....92

Упражнения....94

Резюме....95

Глава 4. Блоки, затенение переменных и управляющие конструкции....96

Блоки....96

Затенение переменных....97

Оператор if....100

Четыре вида оператора for....102

Полный оператор for....102

Оператор for, использующий только условие....103

Бесконечный оператор for....103

Ключевые слова break и continue....104

Оператор for-range....106

Операторы for с метками....111

Выбор подходящего оператора for....113

Оператор switch....114

Пустые переключатели....117

Что лучше выбрать, if или switch?....119

Оператор goto....121

Упражнения....123

Резюме....124

Глава 5. Функции....125

Объявление и вызов функций....125

Имитация именованных и опциональных параметров....126

Вариативные входные параметры и срезы....127

Возврат нескольких значений....128

При возврате нескольких значений всегда возвращается несколько значений....129

Игнорирование возвращаемых значений....130

Именованные возвращаемые значения....131

Никогда не используйте пустые операторы возврата!....132

Функции являются значениями....133

Объявление функциональных типов....136

Анонимные функции....137

Замыкания....139

Передача функций в качестве параметров....141

Возвращение функций из функций....142

Оператор defer....143

Go — язык с передачей параметров по значению....148

Упражнения....151

Резюме....151

Глава 6. Указатели....152

Общие сведения об указателях....152

Не бойтесь указателей....156

Указатели служат признаком изменяемых параметров....158

Указатели — это крайняя мера....162

Влияние передачи указателей на производительность....163

Различие между нулевым значением и отсутствием значения....164

Различие между картами и срезами....165

Использование срезов в качестве буферов....169

Уменьшение нагрузки на сборщик мусора....170

Настройка сборщика мусора....174

Упражнения....176

Резюме....176

Глава 7. Типы, методы и интерфейсы....177

Типы в Go....177

Методы....178

Передача приемника по ссылке и по значению....179

Обрабатывайте в методах пустые ссылки на приемники....182

Методы тоже являются функциями....184

Функции или методы?....185

Объявление типа — это не наследование....185

Типы являются исполняемой документацией....186

Йота иногда используется для создания перечислений....187

Используйте встраивание для реализации композиции....190

Встраивание — это не наследование....191

Общее представление об интерфейсах....193

Интерфейсы обеспечивают типобезопасную утиную типизацию....194

Встраивание и интерфейсы....198

Принимайте интерфейсы, возвращайте структуры....198

Интерфейсы и значение nil....200

Интерфейсы можно сравнивать....201

Пустой интерфейс ничего не сообщает....203

Утверждения типа и переключатели типа....204

Используйте утверждения типа и переключатели типа как можно реже....207

Функциональные типы — ключ к интерфейсам....210

Неявные интерфейсы облегчают внедрение зависимостей....211

Утилита Wire....216

Go нельзя назвать объектно-ориентированным языком (и это здорово!)....216

Упражнения....217

Резюме....217

Глава 8. Обобщенные типы....218

Обобщенные типы уменьшают количество повторяющегося кода и повышают типобезопасность....218

Введение в обобщенные типы....221

Обобщенные функции абстрагируют алгоритмы....224

Обобщенные типы и интерфейсы....226

Используйте списки типов для определения операторов....228

Вывод типов и обобщенные типы....231

Списки типов накладывают ограничения на константы и реализации....231

Объединение обобщенных функций с обобщенными структурами....232

Еще о поддержке сравнения....235

Что остается за бортом....236

Идиоматический Go-код и обобщенные типы....238

Добавление обобщенных типов в стандартную библиотеку....241

Какие нововведения нас ожидают....241

Упражнения....242

Резюме....242

Глава 9. Ошибки....243

Как обрабатывать ошибки. Основы....243

Используйте строки в случае простых ошибок....245

Сигнальные ошибки....246

Ошибки являются значениями....248

Обертывание ошибок....251

Обертывание сразу нескольких ошибок....253

Функции Is и As....255

Обертывание ошибок с помощью оператора defer....259

Функции panic и recover....260

Извлечение трассировки стека из ошибки....263

Упражнения....263

Резюме....264

Глава 10. Модули, пакеты и операции импорта....265

Репозитории, модули и пакеты....265

Файл go.mod....266

Выбор версии Go для сборки кода с помощью директивы go....267

Директива require....269

Компиляция пакетов....269

Операции импорта и экспорта....269

Создание и использование пакета....270

Именование пакетов....272

Переопределение имени пакета....273

Комментарии пакета и Go Doc....274

Пакет internal....277

Циклические зависимости....278

Как следует подходить к организации кода модуля....279

Переименование и реорганизация API без потери работоспособности....281

По возможности не используйте функцию init....282

Работа с модулями....283

Импортирование стороннего кода....284

Работа с версиями....288

Выбор минимальной версии....290

Обновление до совместимых версий....292

Обновление до несовместимых версий....292

Вендоринг....294

Сайт pkg.go.dev....295

Публикация своего модуля....296

Версионирование своего модуля....297

Переопределение зависимостей....298

Отзыв версии модуля....299

Использование рабочих пространств для одновременного изменения модулей....300

Прокси-серверы модулей....304

Настройка прокси-сервера....304

Закрытые репозитории....305

Дополнительные подробности....305

Упражнения....305

Резюме....306

Глава 11. Инструменты Go....307

Тестирование небольших программ с помощью go run....307

Добавление сторонних инструментов с помощью go install....308

Форматирование инструкций импорта с помощью goimports....310

Использование сканеров качества кода....311

staticcheck....312

revive....313

golangci-lint....314

Сканирование уязвимых зависимостей с помощью govulncheck....316

Внедрение контента в программу....318

Внедрение скрытых файлов....322

Использование go generate....323

Работа с go generate и файлами Makefile....326

Чтение информации о сборке из двоичного файла Go....327

Сборка двоичных файлов Go для других платформ....328

Использование тегов сборки....329

Тестирование версий Go....331

Получение дополнительной информации об инструментах Go с помощью go help....331

Упражнения....332

Резюме....332

Глава 12. Конкурентность в Go....333

Когда следует использовать конкурентность....333

Горутины....335

Каналы....337

Чтение, запись и буферизация....337

Цикл for-range и каналы....339

Закрытие канала....339

Различия в поведении каналов....340

Оператор select....341

Принципы и паттерны конкурентного программирования....344

Следите за тем, чтобы конкурентности не было в ваших API....344

Горутины, циклы for и изменяющиеся переменные....345

Всегда закрывайте горутины....347

Использование контекста для завершения горутин....348

Когда следует использовать буферизованные и небуферизованные каналы....349

Противодавление....351

Отключение ветвей оператора select....353

Как установить тайм-аут для кода....354

Использование типа WaitGroup....355

Однократное выполнение кода....357

Собираем инструменты для обеспечения конкурентности....359

Когда вместо каналов следует использовать мьютексы....363

Атомарные операции — скорее всего, они вам не понадобятся....367

Где можно найти более подробную информацию о конкурентности....367

Упражнения....368

Резюме....368

Глава 13. Стандартная библиотека....369

Пакет io и его друзья....369

Пакет time....375

Монотонное время....377

Таймеры и тайм-ауты....378

Пакет encoding/json....378

Используйте теги структур для добавления метаданных....378

Демаршалинг и маршалинг....380

Чтение и запись JSON....381

Кодирование и декодирование JSON-потоков....382

Парсинг пользовательского формата JSON....384

Пакет net/http....387

Клиент....388

Сервер....389

ResponseController....395

Структурированное журналирование....396

Упражнения....399

Резюме....400

Глава 14. Контекст....401

Что такое контекст....401

Значения....404

Отмена....411

Контексты с ограниченным сроком действия....416

Управление отменой контекста в собственном коде....420

Упражнения....421

Резюме....422

Глава 15. Написание тестов ....423

Основы тестирования....423

Выдача сообщения о неудачном завершении теста....425

Подготовка и заключительная уборка....426

Тестирование с использованием переменных окружения....428

Расположение образцов тестовых данных....429

Кэширование результатов теста....429

Тестирование своего публичного API....430

Используйте модуль go-cmp для сравнения результатов тестов....431

Табличные тесты....433

Конкурентное выполнение тестов....435

Проверка степени покрытия кода....437

Фаззинг....439

Сравнительные тесты....447

Заглушки в Go....451

Пакет httptest....456

Интеграционные тесты и теги сборки....459

Выявление проблем конкурентности с помощью детектора состояний гонки....461

Упражнения....463

Резюме....463

Глава 16. «Здесь обитают драконы»: пакеты reflect, unsafe и cgo....464

Рефлексия позволяет работать с типами на этапе выполнения....465

Типы, разновидности и значения....467

Создание новых значений....471

Используйте рефлексию для проверки значения интерфейса на равенство nil....473

Используйте рефлексию для создания маршалера данных....474

Создавайте с помощью рефлексии функции для автоматизации повторяющихся задач....479

Рефлексию можно использовать для создания структур, но лучше этого не делать....480

Рефлексия не позволяет создавать методы....480

Используйте рефлексию только тогда, когда в этом есть смысл....481

Использовать пакет unsafe небезопасно....482

Использование Sizeof и Offsetof....484

Использование unsafe для преобразования внешних двоичных данных....486

Доступ к неэкспортируемым полям....490

Вспомогательные инструменты для пакета unsafe....490

Пакет cgo обеспечивает интеграцию, а не повышает производительность....491

Упражнения....496

Резюме....497

Иллюстрация на обложке....499

Об авторе....498

Go быстро завоевал популярность у разработчиков веб-сервисов. Существует множество учебников, помогающих программистам со знанием других языков освоить его синтаксис, но этого недостаточно. Автор Джон Боднер познакомит вас с паттернами проектирования, созданными опытными инженерами Go, и обоснует их применение. В книге собрана наиболее важная информация, необходимая для написания чистого и идиоматического кода. Начните думать как Go-разработчик, вне зависимости от уровня подготовки. В обновленном издании также рассказывается и о современных инструментах Go, упрощающих решение задач, трудновыполнимых на других платформах.

5 причин купить книгу

  1. Обновленное, полностью переработанное и дополненное издание бестселлера.
  2. Научитесь писать идиоматический код и создавать проекты на Go.
  3. Сможете настраивать среду разработки Go для индивидуальной и командной работы, освоите приемы оптимизации производительности, потребления памяти и уменьшения нагрузки на сборщик мусора.
  4. Увидите, какие особенности Go обеспечивают высокую эффективность языка.
  5. Узнаете, какие возможности Go следует использовать с большой осторожностью или вообще не использовать.




Похожее:

Список отзывов:

Нет отзывов к книге.