Linux и Go. Эффективное низкоуровневое программирование, 2-е изд.
Год издания: 2024
Автор: Цилюрик О.И.
Издательство: БХВ-Петербург
ISBN: 978-5-9775-1979-3
Язык: Русский
Формат: PDF
Качество: Отсканированные страницы + слой распознанного текста
Количество страниц: 381
Описание: Книга содержит вводный курс по языку Go для системного программирования, описывает применение Go для реализации конкурентности и параллелизма, рассказывает об интероперабельности между имеющимся кодом на C с новым кодом на Go, а также исследует возможности внедрения Go для повышения производительности различных дистрибутивов. Второе издание содержит описание языка Go в версии 1.2 и описание реализации TinyGo, дополнительно приведены новые примеры использования языка.
Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.
Примеры страниц (скриншоты)
Оглавление
Предисловие ..................................................................................................................... 9
Предназначение и целевая аудитория ................................................................................. 9
Код примеров и замеченные опечатки ................................................................................ 11
Чего нет в этой книге ........................................................................................................ 13
Соглашения и выделения, принятые в тексте ...................................................................... 13
Напоминание .................................................................................................................... 14
Источники информации ..................................................................................................... 15
ЧАСТЬ 1. ИНСТРУМЕНТАРИЙ ЯЗЫКА GO .............................................................................. 17
Глава 1. Предыстория Go .................................................................................................. 19
Отцы-основатели о целях и мотивации ............................................................................... 19
Применимость: беглый взгляд ............................................................................................ 20
Go, С, С++, Java, Python, Rust ............................................................................................ 21
Управление памятью и истоки ненадежности ....................................................................... 28
Источники информации ...................................................................................................... 29
Глава 2. Разворачиваем экосистему Go ................................................................................ 31
Создание среды ................................................................................................................. 31
Стандартная инсталляция ................................................................................................... 31
Версии среды .................................................................................................................... 34
Альтернативы .................................................................................................................... 35
«Самая последняя» версия ................................................................................................. 36
Смена версий .................................................................................................................... 40
Проверяем: простейшая программа ..................................................................................... 42
Простейшее приложение ................................................................................................... .44
Библиотеки статические и динамические ............................................................................ .45
Компиляция или интерпретация? ......................................................................................... 46
Выбор: GoLang или GCC? .................................................................................................... .47
Инфраструктура GoLang ....................................................................................................... 48
Команды go ......................................................................................................................... 48
Переменные окружения ........................................................................................................ 51
Переменная окружения GOPATH ............................................................................................ 55
Переменная окружения GOTOOLDIR ...................................................................................... 56
Переменные окружения GOARCH и GOOS ............................................................................... 57
Платформы, переносимость и кросс-компиляция .................................................................... 58
Стиль кодирования - автоформатирование: fmt ...................................................................... 61
Сборка приложений: build ..................................................................................................... 62
Сценарии на языке Go: run ................................................................................................... 63
Загрузка проектов из сети: get .............................................................................................. 64
Репозиторные системы .......................................................................................................... 64
Установка проектов .............................................................................................................. 67
Утилиты GoLang: too/ ............................................................................................................ 68
Утилиты компиляции ............................................................................................................. 71
Связь с кодом С: cgo ............................................................................................................. 73
Сторонний и дополнительный инструментарий ........................................................................ 76
Онлайн-инструмент для изучения Go ...................................................................................... 77
Графический терминал Geany ................................................................................................ 78
Интерактивный отладчик Delve .............................................................................................. 79
Источники информации .......................................................................................................... 81
Глава 3. Неформально о синтаксисе Go ................................................................................... 82
Типы данных .......................................................................................................................... 87
Переменные ........................................................................................................................... 89
Объявление переменных ......................................................................................................... 90
Повторные декларации и переприсвоения ................................................................................ 92
Константы .............................................................................................................................. 93
Агрегаты данных .................................................................................................................... 95
Массивы и срезы .................................................................................................................... 95
Двумерные массивы и срезы .................................................................................................. 100
Структуры ............................................................................................................................. 101
Таблицы (хеши) ................................................................................................................... 103
Динамическое создание переменных ...................................................................................... 105
Конструкторы и составные литералы ..................................................................................... 106
Операции ............................................................................................................................ 107
Функции .............................................................................................................................. 110
Вариативные функции ......................................................................................................... 115
Стек процедур завершения ................................................................................................. 117
Обобщенные функции ......................................................................................................... 118
Функции высших порядков ................................................................................................. 119
Встроенные функции ........................................................................................................... 121
Объектно-ориентированное программирование ....................................................................... 123
Методы ................................................................................................................................. 124
Множество методов .................................................................................................... 126
Встраивание и агрегирование .................................................................................... 127
Функции как объекты ................................................................................................. 129
Интерфейсы .......................................................................................................................... 130
Именование интерфейсов .......................................................................................... 133
Контроль интерфейса ................................................................................................. 133
Обработка ошибочных ситуаций ................................................................................................ 134
Структура пакетов (библиотек) Go ............................................................................................ 137
Функция init .......................................................................................................................... 142
Импорт для использования побочных эффектов .............................................................. 143
Некоторые полезные и интересные стандартные пакеты ........................................................ 144
Пакет runtime ........................................................................................................................ 144
Форматированный ввод/вывод ........................................................................................... 145
Строки и пакет strings .......................................................................................................... 146
Строчные литералы ............................................................................................................. 156
Большие числа ...................................................................................................................... 157
Автоматизированное тестирование ......................................................................................... 158
Источники информации .............................................................................................................. 159
Глава 4. Новости от последних версий ......................................................................................... 160
Модули ......................................................................................................................................... 160
Дженерики .................................................................................................................................... 162
Источники информации .............................................................................................................. 167
Глава 5. Альтернативы: TinyGo ................................................................................................... 168
Источники информации .............................................................................................................. 176
ЧАСТЬ 11. КОНКУРЕНТНОСТЬ И МНОГОПРОЦЕССОРНОСТЬ .......................................................... 177
Глава 6. Процессоры в Linux .................................................................................................... 179
Процессоры, ядра и гипертрейдинг ........................................................................................... 182
Загадочная нумерация процессоров ........................................................................................... 184
Управление процессорами Linux ................................................................................................ 187
Аффинити маска .................................................................................................................. 187
Как происходит диспетчирование в Linux? ....................................................................... 190
Приоритеты nice .......................................................................................................... 193
Приоритеты реального времени ................................................................................ 194
Источники информации ..................................................................................................... 196
Глава 7. Параллелизм и миогопроцессориость ............................................................ 197
Эволюция модели параллелизма ......................................................................................... 197
Параллельные процессы и fork ........................................................................................... 191
Потоки ядра и pthread _t POSIX .......................................................................................... 200
Потоки С++ ................................................................................................................. 203
Сопрограммы - модель Go ............................................................................................... 206
Параллелизм в Go ....................................................................................................... 207
Сопрограммы - как это выглядит? ........................................................................................... 208
Возврат значений функцией ............................................................................................... 211
Ретроспектива: сопрограммы в С++ .................................................................................. 212
Каналы .......................................................................................................................................... 212
Функциональные замыкания в сопрограммах .......................................................................... 218
Примитивы синхронизации ........................................................................................................ 220
Конкурентность и параллельность ............................................................................................. 226
Источники информации .............................................................................................................. 231
Глава 8. Масштабирование ...................................................................................................... 232
Планирование активности сопрограмм ..................................................................................... 232
Испытательный стенд .................................................................................................................. 234
Одноплатные микрокомпьютеры (Single-Board Computers) ..................................................... 234
Рабочие десктопы ................................................................................................................ 238
Серверы промышленного класса ........................................................................................ 239
Масштабирование в реальном мире ........................................................................................... 240
Первая попытка .................................................................................................................... 241
Второй подход к снаряду .................................................................................................... 247
О числе потоков исполнения ...................................................................................................... 254
Источники информации .............................................................................................................. 258
ЧАСТЬ 111. НЕКОТОРЫЕ ПРИМЕРЫ И СРАВНЕНИЯ .......................................................................... 261
Глава 9. Осваиваемся в технологии Go ........................................................................................... 263
Консольный ввод/вывод ................................................................ .............................................. 263
Утилита echo ................................................................................................................................ 267
Итерационное вычисление вещественного корня .................................................................... 269
Вычисление числа 7t .................................................................................................................... 271
Вычисления неограниченно высокой точности ........................................................................ 274
Случайная последовательность и ее моменты .......................................................................... 275
Расчет параметров выпуклых 2D-многоугольников ................................................................. 278
ТСР клиент-сервер ....................................................................................................................... 283
Тривиальный веб-сервер ............................................................................................................. 288
Порядок итераций для тар: сюрприз ......................................................................................... 289
Консольный калькулятор ............................................................................................................ 290
Источники информации .............................................................................................................. 293
Глава 10. Структуры данных, типы и их методы ........................................................................... 294
Массивы и срезы .......................................................................................................................... 294
Многомерные срезы и массивы .................................................................................................. 299
Функции с множественным возвратом ...................................................................................... 300
Глава 11. Строки, руны и UNICODE .............................................................................................. 303
Символы, байты и руны .............................................................................................................. 303
Изменение содержимого строк ................................................................................................... 305
Палиндромы ................................................................................................................................. 306
Регулярные выражения ............................................................................................................... 311
Источники информации .............................................................................................................. 315
Глава 12. Элементы функционального программирования ............................................................ 316
Функциональные замыкания ...................................................................................................... 316
Карринг ......................................................................................................................................... 324
Рекурсия ....................................................................................................................................... 325
Рекурсия с кешированием ............................................................................................................. 326
Чистые функции ........................................................................................................................... 329
Источники информации .............................................................................................................. 329
Глава 13. Скоростные и другие сравнения языков ..................................................................... 330
Алгоритмические задачи для сравнения .................................................................................... 330
Некоторые известные алгоритмы ............................................................................................... 331
Числа Фибоначчи ................................................................................................................. 332
Пузырьковая сортировка ..................................................................................................... 3 3 5
Ханойская башня ................................................................................................................. 341
Решето Эратосфена ............................................................................................................. 344
Глава 14. Многопроцессорные параллельные вычисления ....................................................... 349
Скорость активации параллельных ветвей ................................................................................ 349
Гонки ..................................................................................................................................... 354
Защита критических данных ................................................................................................... 358
Неблокирующий ввод с клавиатуры .......................................................................................... 362
Многопроцессорный брутфорс .................................................................................................. 366
Каналы в сопрограммах ............................................................................................................ 372
Таймеры .................................................................................................................................. 373
Тикеры .................................................................................................................................... 375
Когда не нужно злоупотреблять мноrопроцессорностью ............................................................... 376
Источники информации ............................................................................................................. 380
Заключение .............................................................................................................................. 381
Об авторе ................................................................................................................................. 382