Руководство по программированию на GO.

Донован, Алан А. А., Керниган, Брайан, У."Язык программирования Go" Вильямс, 2016 год, 432 стр. (19,8 мб. djvu + 18,3 мб. pdf + 0,2 мб. code)

Язык Go является одним из современных высокоуровневых языков, он имеет неоспоримое преимущество ретроспективного анализа других языков, и в полной мере им пользуется. В Go есть сборка мусора, система пакетов, валидные функции, лексическая область видимости, интерфейс системных вызовов и неизменяемые строки с возможностью кодировки UTF-8. Go часто описывают как "C-подобный язык" или "язык С XXI века" .

От языка С Go унаследовал синтаксис выражений, конструкции управления потоком, базовые типы данных, передачу параметров в функции по значению, понятие указателей и, что важнее всего, направленность С на получение при компиляции эффективного машинного кода и полное взаимодействие с абстракциями современных операционных систем. Язык Go имеет открытый исходный код, а исходные тексты его библиотек и инструментов, включая компилятор, находятся в открытом доступе. Свой вклад в язык, его библиотеки и инструментарий вносят многие программисты всего мира.

Go работает на большом количестве Unix-подобных систем, таких как Linux, FreeBSD, OpenBSD, Mac OS X, а также на Plan 9 и Microsoft Windows; при этом программы, написанные для одной из этих сред, легко переносимы на другие. Эта книга поможет вам начать работу с Go, и эффективно использовать все его преимущества и особенности, а также богатые стандартные библиотеки для создания понятных, самодостаточных и эффективных программ.
ISBN 978-5-8459-2051-5 (рус.)

Оглавление.

Предисловие 11
Происхождение Go 12
Проект Go 13
Структура книги 15
Дополнительная информация 17
Благодарности 18
Ждем ваших отзывов! 19

Глава 1. Учебник 21
1.1. Hello, World 21
1.2. Аргументы командной строки 24
1.3. Поиск повторяющихся строк 29
1.4. Анимированные GIF-изображения 34
1.5. Выборка URL 37
1.6. Параллельная выборка URL 39
1.7. Веб-сервер 41
1.8. Некоторые мелочи 46

Глава 2. Структура программы 49
2.1. Имена 49
2.2. Объявления 50
2.3. Переменные 52
2.3.1. Краткое объявление переменной 53
2.3.2. Указатели 54
2.3.3. Функция new 57
2.3.4. Время жизни переменных 58
2.4. Присваивания 59
2.4.1. Присваивание кортежу 60
2.4.2. Присваиваемость 61
2.5. Объявления типов 62
2.6. Пакеты и файлы 64
2.6.1. Импорт 66
2.6.2. Инициализация пакетов 68
2.7. Область видимости 70

Глава 3. Фундаментальные типы данных 75
3.1. Целые числа 75
3.2. Числа с плавающей точкой 81
3.3. Комплексные числа 86
3.4. Булевы значения 88
3.5. Строки 90
3.5.1. Строковые литералы 91
3.5.2. Unicode 92
3.5.3. UTF-8 93
3.5.4. Строки и байтовые срезы 97
3.5.5. Преобразования между строками и числами 101
3.6. Константы 102
3.6.1. Генератор констант iota 103
3.6.2. Нетипизированные константы 105

Глава 4. Составные типы 109
4.1. Массивы 109
4.2. Срезы 112
4.2.1. Функция append 117
4.2.2. Работа со срезами "на месте” 120
4.3. Отображения 123
4.4. Структуры 130
4.4.1. Структурные литералы 133
4.4.2. Сравнение структур 134
4.4.3. Встраивание структур и анонимные поля 135
4.5 JSON 138
4.6. Текстовые и HTML-шаблоны 144

Глава 5. Функции 151
5.1. Объявления функций 151
5.2. Рекурсия 153
5.3. М ножественные возвращаемые значения 157
5.4. Ошибки 160
5.4.1. Стратегии обработки ошибок 161
5.4.2. Конец файла (EOF) 164
5.5. Значения-функции 165
5.6. Анонимные функции 168
5.6.1. Предупреждение о захвате переменных итераций 174
5.7. Вариативные функции 176
5.8. Отложенные вызовы функций 178
5.9. Аварийная ситуация 183
5.10. Восстановление 186

Глава 6. Методы 191
6.1. Объявления методов 191
6.2. Методы с указателем в роли получателя 194
6.2.1. Значение nil является корректным получателем 196
6.3. Создание типов путем встраивания структур 197
6.4. Значения-методы и выражения-методы 200
6.5. Пример: тип битового вектора 202
6.6. Инкапсуляция 205

Глава 7. Интерфейсы 209
7.1. Интерфейсы как контракты 209
7.2. Типы интерфейсов 212
7.3. Соответствие интерфейсу 213
7.4. Анализ флагов с помощью flag.Value 217
7.5. Значения интерфейсов 220
7.5.1. Осторожно: интерфейс, содержащий нулевой указатель, не является нулевым 224
7.6. Сортировка с помощью sort.Interface 225
7.7. Интерфейс http.Handler 231
7.8. Интерфейс error 236
7.9. Пример: вычислитель выражения 238
7.10. Декларации типов 246
7.11. Распознавание ошибок с помощью деклараций типов 248
7.12. Запрос поведения с помощью деклараций типов 250
7.13. Выбор типа 252
7.14. Пример: XML-декодирование на основе лексем 255
7.15. Несколько советов 258

Глава 8. Go-подпрограммы и каналы 259
8.1. Go-подпрограммы 259
8.2. Пример: параллельный сервер часов 261
8.3. Пример: параллельный эхо-сервер 265
8.4. Каналы 267
8.4.1. Небуферизованные каналы 269
8.4.2. Конвейеры 270
8.4.3. Однонаправленные каналы 273
8.4.4. Буферизованные каналы 275
8.5. Параллельные циклы 278
8.6. Пример: параллельный веб-сканер 283
8.7. Мультиплексирование с помощью select 288
8.8. Пример: параллельный обход каталога 292
8.9. Отмена 296
8.10. Пример: чат-сервер 299

Глава 9. Параллельность и совместно используемые переменные 303
9.1. Состояния гонки 303
9.2. Взаимные исключения: sync.Mutex 309
9.3. Мьютексы чтения/записи: sync.RWMutex 313
9.4. Синхронизация памяти 314
9.5. Отложенная инициализация: sync.Once 316
9.6. Детектор гонки 319
9.7. Пример: параллельный неблокирующий кеш 319
9.8. Go-подпрограммы и потоки 328
9.8.1. Растущие стеки 328
9.8.2. Планирование go-подпрограмм 329
9.8.3. GOMAXPROCS 329
9.8.4. G o-подпрограммы не имеют идентификации 330

Глава 10. Пакеты и инструменты Go 333
10.1. Введение 333
10.2. Пути импорта 334
10.3. Объявление пакета 335
10.4. Объявления импорта 336
10.5. Пустой импорт 337
10.6. Пакеты и именование 339
10.7. Инструментарий Go 341
10.7.1. Организация рабочего пространства 342
10.7.2. Загрузка пакетов 343
10.7.3. П остроение пакетов 344
10.7.4. Документирование пакетов 347
10.7.5. Внутренние пакеты 349
10.7.6. Запрашиваемые пакеты 350

Глава 11. Тестирование 353
11.1. Инструмент go test 354
11.2. Тестовые функции 354
11.2.1. Рандомизированное тестирование 359
11.2.2. Тестирование команд 361
11.2.3. Тестирование белого ящика 363
11.2.4. Внешние тестовые пакеты 367
11.2.5. Написание эффективных тестов 369
11.2.6. Избегайте хрупких тестов 371
11.3. Охват 372
11.4. Функции производительности 375
11.5. Профилирование 378
11.6. Ф ункции-примеры 381

Глава 12. Рефлексия 383
12.1. Почему рефлексия? 383
12.2. reflect.Туре и reflect.Value 384
12.3. Рекурсивный вывод значения 387
12.4. Пример: кодирование S-выражений 393
12.5. Установка переменных с помощью reflect.Value 396
12.6. Пример: декодирование S-выражений 399
12.7. Доступ к дескрипторам полей структур 403
12.8. Вывод методов типа 407
12.9. Предостережение 408

Глава 13. Низкоуровневое программирование 409
1 3 .1. unsafe.Sizeof , Alignof и Offsetof 410
13.2. unsafe.Pointer 412
13.3. Пример: глубокое равенство 415
13.4. Вызов кода С с помощью ego 418
13.5. Еще одно предостережение 423
Предметный указатель 425

Скачать книгу бесплатно19,8 мб. djvu Скачать книгу бесплатно18,3 мб. pdf Скачать code бесплатно0,2 мб. code