Содержание....8
Предисловие....13
Происхождение Go....14
Проект Go....15
Структура книги....17
Дополнительная информация....19
Благодарности....20
Ждем ваших отзывов!....21
Глава 1. Учебник....23
1.1. Hello, World....23
1.2. Аргументы командной строки....26
1.3. Поиск повторяющихся строк....31
1.4. Анимированные GIF-изображения....36
1.5. Выборка URL....39
1.6. Параллельная выборка URL....41
1.7. Веб-сервер....43
1.8. Некоторые мелочи....48
Глава 2. Структура программы....51
2.1. Имена....51
2.2. Объявления....52
2.3. Переменные....54
2.3.1. Краткое объявление переменной....55
2.3.2. Указатели....56
2.3.3. Функция new....59
2.3.4. Время жизни переменных....60
2.4. Присваивания....61
2.4.1. Присваивание кортежу....62
2.4.2. Присваиваемость....63
2.5. Объявления типов....64
2.6. Пакеты и файлы....66
2.6.1. Импорт....68
2.6.2. Инициализация пакетов....70
2.7. Область видимости....72
Глава 3. Фундаментальные типы данных....77
3.1. Целые числа....77
3.2. Числа с плавающей точкой....83
3.3. Комплексные числа....88
3.4. Булевы значения....90
3.5. Строки....92
3.5.1. Строковые литералы....93
3.5.2. Unicode....94
3.5.3. UTF-8....95
3.5.4. Строки и байтовые срезы....99
3.5.5. Преобразования между строками и числами....103
3.6. Константы....104
3.6.1. Генератор констант iota....105
3.6.2. Нетипизированные константы....107
Глава 4. Составные типы....111
4.1. Массивы....111
4.2. Срезы....114
4.2.1. Функция append....119
4.2.2. Работа со срезами «на месте»....122
4.3. Отображения....125
4.4. Структуры....132
4.4.1. Структурные литералы....135
4.4.2. Сравнение структур....136
4.4.3. Встраивание структур и анонимные поля....137
4.5. JSON....140
4.6. Текстовые и HTML-шаблоны....146
Глава 5. Функции....153
5.1. Объявления функций....153
5.2. Рекурсия....155
5.3. Множественные возвращаемые значения....159
5.4. Ошибки....162
5.4.1. Стратегии обработки ошибок....163
5.4.2. Конец файла (EOF)....166
5.5. Значения-функции....167
5.6. Анонимные функции....170
5.6.1. Предупреждение о захвате переменных итераций....176
5.7. Вариативные функции....178
5.8. Отложенные вызовы функций....180
5.9. Аварийная ситуация....185
5.10. Восстановление....188
Глава 6. Методы....193
6.1. Объявления методов....193
6.2. Методы с указателем в роли получателя....196
6.2.1. Значение nil является корректным получателем....198
6.3. Создание типов путем встраивания структур....199
6.4. Значения-методы и выражения-методы....202
6.5. Пример: тип битового вектора....204
6.6. Инкапсуляция....207
Глава 7. Интерфейсы....211
7.1. Интерфейсы как контракты....211
7.2. Типы интерфейсов....214
7.3. Соответствие интерфейсу....215
7.4. Анализ флагов с помощью flag.Value....219
7.5. Значения интерфейсов....222
7.5.1. Осторожно: интерфейс, содержащий нулевой указатель, не является нулевым....226
7.6. Сортировка с помощью sort.Interface....227
7.7. Интерфейс http.Handler....233
7.8. Интерфейс error....238
7.9. Пример: вычислитель выражения....240
7.10. Декларации типов....248
7.11. Распознавание ошибок с помощью деклараций типов....250
7.12. Запрос поведения с помощью деклараций типов....252
7.13. Выбор типа....254
7.14. Пример: XML-декодирование на основе лексем....257
7.15. Несколько советов....260
Глава 8. Go-подпрограммы и каналы....261
8.1. Go-подпрограммы....261
8.2. Пример: параллельный сервер часов....263
8.3. Пример: параллельный эхо-сервер....267
8.4. Каналы....269
8.4.1. Небуферизованные каналы....271
8.4.2. Конвейеры....272
8.4.3. Однонаправленные каналы....275
8.4.4. Буферизованные каналы....277
8.5. Параллельные циклы....280
8.6. Пример: параллельный веб-сканер....285
8.7. Мультиплексирование с помощью select....290
8.8. Пример: параллельный обход каталога....294
8.9. Отмена....298
8.10. Пример: чат-сервер....301
Глава 9. Параллельность и совместно используемые переменные....305
9.1. Состояния гонки....305
9.2. Взаимные исключения: sync.Mutex....311
9.3. Мьютексы чтения/записи: sync.RWMutex....315
9.4. Синхронизация памяти....316
9.5. Отложенная инициализация: sync.Once....318
9.6. Детектор гонки....321
9.7. Пример: параллельный неблокирующий кеш....321
9.8. Go-подпрограммы и потоки....330
9.8.1. Растущие стеки....330
9.8.2. Планирование go-подпрограмм....331
9.8.3. GOMAXPROCS....331
9.8.4. Go-подпрограммы не имеют идентификации....332
Глава 10. Пакеты и инструменты Go....335
10.1. Введение....335
10.2. Пути импорта....336
10.3. Объявление пакета....337
10.4. Объявления импорта....338
10.5. Пустой импорт....339
10.6. Пакеты и именование....341
10.7. Инструментарий Go....343
10.7.1. Организация рабочего пространства....344
10.7.2. Загрузка пакетов....345
10.7.3. Построение пакетов....346
10.7.4. Документирование пакетов....349
10.7.5. Внутренние пакеты....351
10.7.6. Запрашиваемые пакеты....352
Глава 11. Тестирование....355
11.1. Инструмент go test....356
11.2. Тестовые функции....356
11.2.1. Рандомизированное тестирование....361
11.2.2. Тестирование команд....363
11.2.3. Тестирование белого ящика....365
11.2.4. Внешние тестовые пакеты....369
11.2.5. Написание эффективных тестов....371
11.2.6. Избегайте хрупких тестов....373
11.3. Охват....374
11.4. Функции производительности....377
11.5. Профилирование....380
11.6. Функции-примеры....383
Глава 12. Рефлексия....385
12.1. Почему рефлексия?....385
12.2. reflect.Туре и reflect.Value....386
12.3. Рекурсивный вывод значения....389
12.4. Пример: кодирование S-выражений....395
12.5. Установка переменных с помощью reflect.Value....398
12.6. Пример: декодирование S-выражений....401
12.7. Доступ к дескрипторам полей структур....405
12.8. Вывод методов типа....409
12.9. Предостережение....410
Глава 13. Низкоуровневое программирование....411
13.1. unsafe.Sizeof, Alignof и Offsetof....412
13.2. unsafe.Pointer....414
13.3. Пример: глубокое равенство....417
13.4. Вызов кода С с помощью cgo....420
13.5. Еще одно предостережение....425
Предметный указатель....427
Вы краем уха слышали о новом языке программирования Go, но не знаете, что он представляет собой на самом деле? Ответы на все ваши вопросы вы получите в этой книге. Она поможет вам познакомиться с языком Go поближе, узнать о его предназначении и преимуществах, и о том, как писать программы на этом языке (причем это будут программы не начинающего, но профессионального программиста - эффективные и идеоматичные).
Книга написана двумя профессионалами - как в области программирования, так и в области написания книг на программистские темы. Так что если вы хотите быть в курсе последних достижений в программировании - не сомневайтесь, взяв эту книгу, вы свернули на верный путь к профессиональному овладению языком Go.