Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы. 3 изд

Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы. 3 изд

Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы. 3 изд
Автор: Цукалос Михалис
Дата выхода: 2024
Издательство: Питер
Количество страниц: 624
Размер файла: 3.4 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

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

О научном редакторе....18

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

Для кого эта книга....19

Структура издания....19

Как сделать книгу максимально полезной....21

Файлы с примерами кода....22

Цветные иллюстрации....22

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

От издательства....23

Глава 1. Краткое введение в Go....24

Введение в Go....25

История Go....26

Почему UNIX, а не Windows....27

Преимущества Go....28

Утилиты go doc и godoc....30

Hello World!....31

Введение в функции....32

Введение в пакеты....32

Запуск Go-кода....33

Компиляция Go-кода....33

Использование Go в качестве языка скриптов....33

Важные правила форматирования и кодирования....34

Важные особенности Go....35

Определение и использование переменных....36

Управление ходом выполнения программы....39

Итерации с помощью циклов for и range....41

Получение пользовательского ввода....43

Использование переменных ошибок для различения типов входных данных....48

Знакомство с моделью параллелизма в Go....49

Разработка утилиты which(1) на Go....51

Вывод информации в лог....54

Функции log.Fatal() и log.Panic()....56

Запись в пользовательский файл журнала....58

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

Обзор Go-дженериков....61

Разработка базового приложения телефонной книги....62

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

Резюме....66

Дополнительные ресурсы....67

Глава 2. Основные типы данных Go....68

Тип данных error....69

Числовые типы данных....72

Нечисловые типы данных....75

Строки, символы и руны....75

Время и даты....82

Go-константы....87

Генератор констант iota....88

Группировка схожих данных....90

Массивы....90

Срезы....91

Указатели....108

Генерация случайных чисел....112

Генерация случайных строк....113

Генерация безопасных случайных чисел....114

Обновление приложения телефонной книги....115

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

Резюме....117

Дополнительные ресурсы....117

Глава 3. Составные типы данных....118

Карты....119

Сохранение в карту nil....120

Перебор карт....122

Структуры....123

Определение новых структур....123

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

Срезы структур....126

Регулярные выражения и сопоставление с образцом....128

О регулярных выражениях Go....129

Сопоставление имен и фамилий....130

Сопоставление целых чисел....131

Сопоставление полей записи....132

Улучшение приложения телефонной книги....133

Работа с CSV-файлами....133

Добавление индекса....137

Улучшенная версия приложения для телефонной книги....138

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

Резюме....147

Дополнительные ресурсы....147

Глава 4. Рефлексия и интерфейсы....148

Рефлексия....149

Изучение внутренней структуры Go-структуры....151

Изменение значений структуры с использованием рефлексии....153

Три недостатка рефлексии....154

Методы типа....155

Создание методов типа....155

Использование методов типа....156

Интерфейсы....159

Интерфейс sort.Interface....162

Пустой интерфейс....164

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

Карта map[string]interface{}....170

Тип данных error....173

Написание собственных интерфейсов....176

Работа с двумя различными форматами файлов CSV....182

Объектно-ориентированное программирование в Go....185

Обновление приложения телефонной книги....189

Настройка значения CSV-файла....189

Использование пакета sort....190

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

Резюме....192

Дополнительные ресурсы....193

Глава 5. Пакеты и функции Go....194

Go-пакеты....195

Скачивание Go-пакетов....195

Функции....198

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

Функции, возвращающие несколько значений....199

Возвращаемые значения функции могут иметь имя....200

Функции, которые принимают другие функции в качестве параметров....201

Функции могут возвращать другие функции....202

Функции с переменным количеством параметров....204

Ключевое слово defer....208

Разработка собственных пакетов....210

Функция init()....211

Порядок исполнения....212

Использование GitHub для хранения Go-пакетов....213

Пакет для работы с базой данных....215

Знакомство с базой данных....216

Хранение Go-пакета....220

Дизайн Go-пакета....221

Реализация Go-пакета....223

Тестирование Go-пакета....230

Модули....233

Создание более качественных пакетов....234

Создание документации....235

GitLab Runners и Go....242

Начальная версия файла конфигурации....243

Окончательная версия конфигурационного файла....245

GitHub Actions и Go....246

Хранение секретов в GitHub....248

Окончательная версия конфигурационного файла....248

Утилиты управления версиями....250

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

Резюме....252

Дополнительные ресурсы....253

Глава 6. Даем указания системе UNIX....254

stdin, stdout и stderr....255

Процессы UNIX....256

Обработка сигналов UNIX....256

Файловый ввод-вывод....260

Интерфейсы io.Reader и io.Writer....260

Правильное и неправильное использование io.Reader и io.Writer....261

Буферизованный и небуферизованный файловый ввод-вывод....265

Чтение текстовых файлов....266

Чтение текстового файла построчно....266

Чтение текстового файла слово за словом....267

Чтение текстового файла символ за символом....269

Чтение из /dev/random....270

Считывание определенного объема данных из файла....271

Запись в файл....272

Работа с JSON....275

Использование Marshal() и Unmarshal()....275

Структуры и JSON....277

Чтение и запись данных JSON в виде потоков....278

Структурный вывод записи JSON....279

Работа с XML....281

Преобразование JSON в XML и обратно....282

Работа с YAML....283

Пакет viper....285

Использование флагов командной строки....286

Чтение конфигурационных файлов JSON....289

Пакет cobra....292

Утилита с тремя командами....294

Добавление флагов командной строки....294

Создание псевдонимов команд....295

Создание подкоманд....296

Поиск циклов в файловой системе UNIX....297

Новое в Go 1.16....300

Встраивание файлов....300

ReadDir и DirEntry....303

Пакет io/fs....304

Обновление приложения телефонной книги....306

Использование cobra....307

Хранение и загрузка данных в формате JSON....308

Реализация команды delete....308

Реализация команды insert....309

Реализация команды list....309

Реализация команды search....310

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

Резюме....312

Дополнительные ресурсы....312

Глава 7. Параллельное выполнение в Go....313

Процессы, потоки и горутины....314

Планировщик Go....315

Переменная среды GOMAXPROCS....317

Параллелизм и распараллеливание....319

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

Создание горутины....320

Создание нескольких горутин....321

Ожидание завершения горутин....321

Что делать, если количество вызовов Add() и Done() разное....323

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

Каналы....326

Запись в канал и чтение из него....326

Прием из закрытого канала....329

Каналы как параметры функций....330

Состояния гонки....331

Ключевое слово select....333

Установка тайм-аута горутины....335

Ограничение времени выполнения горутины — внутри main()....335

Ограничение времени выполнения горутины — вне main()....337

Еще раз о каналах в Go....338

Буферизованные каналы....339

Nil-каналы....340

Пулы рабочих процессов....342

Сигнальные каналы....345

Общая память и общие переменные....348

Тип sync.Mutex....349

Тип sync.RWMutex....351

Пакет atomic....354

Совместное использование памяти с помощью горутин....356

Закрытые переменные и оператор go....358

Пакет context....360

Пакет semaphore....365

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

Резюме....368

Дополнительные ресурсы....369

Глава 8. Создание веб-сервисов....370

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

Тип http.Response....371

Тип http.Request....372

Тип http.Transport....372

Создание веб-сервера....373

Обновление приложения телефонной книги....377

Определение API....377

Реализация обработчиков....378

Предоставление метрик для Prometheus....386

Пакет runtime/metrics....387

Предоставление метрик....389

Чтение метрик....396

Ввод метрик в Prometheus....397

Визуализация метрик Prometheus в Grafana....401

Разработка веб-клиентов....403

Использование http.NewRequest() для улучшения работы клиента....404

Создание клиента для сервиса телефонной книги....407

Создание файловых серверов....412

Загрузка содержимого приложения телефонной книги....414

Время ожидания HTTP-соединений....416

Использование функции SetDeadline()....416

Установка периода ожидания на стороне клиента....417

Установка времени ожидания на стороне сервера....420

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

Резюме....421

Дополнительные ресурсы....422

Глава 9. Работа с TCP/IP и WebSocket....423

TCP/IP....424

Пакет net....426

Разработка TCP-клиента....426

Разработка TCP-клиента с помощью net.Dial()....426

Разработка TCP-клиента, использующего net.DialTCP()....428

Разработка TCP-сервера....430

Разработка TCP-сервера с помощью net.Listen()....430

Разработка TCP-сервера, использующего net.ListenTCP()....433

Разработка UDP-клиента....435

Разработка UDP-сервера....437

Разработка параллельных TCP-серверов....440

Работа с доменными сокетами UNIX....442

Сервер на сокетах домена UNIX....442

Клиент сокета домена UNIX....444

Создание сервера WebSocket....447

Реализация сервера....448

Создание клиента WebSocket....455

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

Резюме....460

Дополнительные ресурсы....460

Глава 10. Работа с REST API....461

Введение в REST....462

Разработка серверов и клиентов RESTful....464

Сервер RESTful....465

Клиент RESTful....473

Создание функционального сервера RESTful....481

REST API....482

Использование пакета gorilla/mux....483

Использование подмаршрутизаторов....484

Работа с базой данных....484

Тестирование пакета restdb....490

Реализация сервера RESTful....491

Тестирование сервера RESTful....495

Создание клиента RESTful....499

Создание структуры клиента командной строки....500

Реализация клиентских команд RESTful....501

Использование клиента RESTful....505

Работа с несколькими версиями REST API....507

Загрузка и скачивание двоичных файлов....507

Использование Swagger для документации REST API....512

Документирование REST API....514

Создание файла документации....517

Обслуживание файла документации....518

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

Резюме....521

Дополнительные ресурсы....521

Глава 11. Тестирование и профилирование кода....523

Оптимизация кода....524

Оценка производительности....525

Переписывание функции main() для более качественного тестирования....526

Анализ производительности буферизованной записи и чтения....527

Утилита benchstat....531

Неправильно определенные бенчмарк-функции....532

Профилирование кода....533

Профилирование приложения командной строки....534

Профилирование HTTP-сервера....537

Веб-интерфейс профилировщика Go....539

Утилита go tool trace....540

Трассировка веб-сервера со стороны клиента....542

Посещение всех маршрутов веб-сервера....544

Тестирование Go-кода....548

Написание тестов для ./ch03/intRE.go....549

Функция TempDir()....551

Функция Cleanup()....551

Пакет testing/quick....553

Тайм-аут тестов....555

Покрытие тестового кода....556

Поиск недостижимого Go-кода....559

Тестирование HTTP-сервера с помощью серверной части базы данных....561

Фаззинг....566

Кросс-компиляция....567

Использование директивы go:generate....569

Создание примеров функций....571

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

Резюме....573

Дополнительные ресурсы....574

Глава 12. Работа с gRPC....575

Введение в gRPC....575

Буферы протокола....576

Определение файла языка определения интерфейса....577

Разработка сервера gRPC....581

Разработка клиента gRPC....584

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

Резюме....588

Дополнительные ресурсы....589

Глава 13. Дженерики Go....590

Введение в дженерики....591

Ограничения....593

Определение новых типов данных с помощью дженериков....596

Интерфейсы и дженерики....600

Рефлексия и дженерики....602

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

Резюме....605

Дополнительные ресурсы....605

Приложение. Сборщик мусора Go....607

Куча и стек....607

Сборка мусора....611

Алгоритм трех цветов....614

Подробнее о работе сборщика мусора в Go....617

Карты, срезы и сборщик мусора Go....618

Сравнение эффективности представленных техник....621

Дополнительные ресурсы....622

Вам уже знакомы основы языка Go? В таком случае эта книга для вас. Михалис Цукалос продемонстрирует возможности языка, даст понятные и простые объяснения, приведет примеры и предложит эффективные паттерны программирования.

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

Уникальным материалом станет глава о машинном обучении на языке Go, в которой вы пройдёте от основополагающих статистических приемов до регрессии и кластеризации. Вы изучите классификацию, нейронные сети и приёмы выявления аномалий. Из прикладных разделов вы узнаете: как использовать Go с Docker и Kubernetes, Git, WebAssembly, JSON и др.


Похожее:

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

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