Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Go на практике

Покупка
Артикул: 712483.01.99
Доступ онлайн
799 ₽
В корзину
Go—превосходный системный язык. Созданный для удобной разработки современных приложений с параллельной обработкой, Go предоставляет встроенный набор инструментов для быстрого создания облачных, системных и веб-приложений. Знакомые с такими языками, как Java или С#, быстро освоят Go — достаточно лишь немного попрактиковаться, чтобы научиться писать профессиональный код. Книга содержит решения десятков типовых задач в ключевых областях. Следуя стилю сборника рецептов — проблема/решение/обсуждение, — это практическое руководство опирается на основополагающие концепции языка Go и знакомит с конкретными приемами использования Go в облаке, тестирования и отладки, маршрутизации, а также создания веб-служб, сетевых и многих других приложений. Издание адресовано опытным разработчикам, уже начавшим изучать язык Go и желающим научиться эффективно использовать его в своей профессиональной деятельности.
Батчер, М. Go на практике / Мэтт Батчер, Мэтт Фарина ; пер. с англ. Р.Н. Рагимова ; под науч. ред. А.Н. Киселева. - Москва : ДМК Пресс, 2017. - 374 с. - ISBN 978-5-97060-477-9. - Текст : электронный. - URL: https://znanium.com/catalog/product/1028131 (дата обращения: 05.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Мэтт Батчер, Мэтт Фарина

Go на практике

Matt Butcher, Matt Farina

GO IN PRACTICE

Мэтт Батчер, Мэтт Фарина

GO НА ПРАКТИКЕ

Москва, 2017

УДК 004.438Go
ББК 32.973.26-018.1
Б28

Батчер М., Фарина М.
Б28 
Go на практике / пер. с англ. Р. Н. Рагимова; науч. ред. А. Н. 
Киселев. – М.: ДМК Пресс, 2017. – 374 с.: ил. 

ISBN 978-5-97060-477-9

Go – превосходный системный язык. Созданный для удобной разработки современных приложений с параллельной обработкой, Go предоставляет встроенный набор инструментов для быстрого создания облачных, системных и веб-приложений. 
Знакомые с такими языками, как Java или C#, быстро освоят Go – достаточно 
лишь немного попрактиковаться, чтобы научиться писать профессиональный код.
Книга содержит решения десятков типовых задач в ключевых областях. Следуя 
стилю сборника рецептов – проблема/решение/обсуждение, – это практическое 
руководство опирается на основополагающие концепции языка Go и знакомит 
с конкретными приемами использования Go в облаке, тестирования и отладки, 
маршрутизации, а также создания веб-служб, сетевых и многих других приложений.
Издание адресовано опытным разработчикам, уже начавшим изучать язык Go 
и желающим научиться эффективно использовать его в своей профессиональной 
деятельности.

УДК 004.438Go
ББК 32.973.26-018.1

Copyright © Manning Publications Co. 2016. First published in the English 
language under the title ‘Go in Practice (9781633430075)’.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без 
письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство 
не может гарантировать абсолютную точность и правильность приводимых 
сведений. В связи с этим издательство не несет ответственности за возможные 
ошибки, связанные с использованием книги.

ISBN 978-1-63343-007-5 (анг.) 
Copyright © 2016 by Manning  
 
Publications Co.
ISBN 978-5-97060-477-9 (рус.) 
© Оформление, издание, перевод,  
 
ДМК Пресс, 2017

Содержание

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

Введение ................................................................................................................ 11

Благодарности ................................................................................................. 12

О книге ...................................................................................................................... 15

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

Об изображении на обложке .............................................................. 18

Часть I. Основные понятия и принципы ................................... 19

Глава 1. Введение в язык Go ............................................................... 20
1.1. Что представляет собой язык Go? ............................................................... 21
1.2. Примечательные особенности языка Go................................................... 23

1.2.1. Возврат нескольких значений .............................................................. 23
1.2.2. Современная стандартная библиотека .............................................. 25
1.2.3. Параллельная обработка с помощью сопрограмм  
и каналов ................................................................................................................. 28
1.2.4. Go – больше, чем язык ............................................................................ 32

1.3. Место языка Go среди других языков программирования ................ 38

1.3.1. C и Go ............................................................................................................ 38
1.3.2. Java и Go ....................................................................................................... 40
1.3.3. Python, PHP и Go ..................................................................................... 41
1.3.4. JavaScript, Node.js и Go ........................................................................... 43

1.4. Подготовка и запуск программы на языке Go ........................................ 45

1.4.1. Установка Go .............................................................................................. 45
1.4.2. Работа с Git, Mercurial и другими системами управления  
версиями ................................................................................................................. 46
1.4.3. Знакомство с рабочей областью .......................................................... 46
1.4.4. Работа с переменными среды ............................................................... 47

1.5. Приложение Hello Go ...................................................................................... 47
1.6. Итоги ..................................................................................................................... 49

 Содержание

Глава 2. Надежная основа ..................................................................... 51
2.1. CLI-приложения на Go ................................................................................... 52

2.1.1. Флаги командной строки ....................................................................... 52
2.1.2. Фреймворки командной строки .......................................................... 59

2.2. Обработка конфигурационной информации .......................................... 65
2.3. Работа с действующими веб-серверами .................................................... 73

2.3.1. Запуск и завершение работы сервера ................................................ 74
2.3.2. Маршрутизация веб-запросов .............................................................. 79

2.4. Итоги ..................................................................................................................... 90

Глава 3. Параллельные вычисления в Go .............................. 92
3.1. Модель параллельных вычислений в Go .................................................. 92
3.2. Работа с сопрограммами ................................................................................. 93
3.3. Работа с каналами ...........................................................................................108
3.4. Итоги ...................................................................................................................122

Часть II. Надежные приложения ...................................................123

Глава 4. Обработка ошибок и аварий .......................................124
4.1. Обработка ошибок ..........................................................................................125
4.2. Система аварий ................................................................................................134

4.2.1. Отличия аварий от ошибок .................................................................135
4.2.2. Работа с авариями ...................................................................................136
4.2.3. Восстановление после аварий  ...........................................................139
4.2.4. Аварии и сопрограммы .........................................................................145

4.3. Итоги ...................................................................................................................154

Глава 5. Отладка и тестирование .................................................155
5.1. Определение мест возникновения ошибок ............................................156

5.1.1. Подождите, где мой отладчик? ..........................................................156

5.2. Журналирование..............................................................................................157

5.2.1. Журналирование в Go ...........................................................................157
5.2.2. Работа с системными регистраторами ............................................168

5.3. Доступ к трассировке стека .........................................................................173
5.4. Тестирование .....................................................................................................176

5.4.1. Модульное тестирование .....................................................................177
5.4.2. Порождающее тестирование ...............................................................183

5.5. Тестирование производительности и хронометраж ............................186
5.6. Итоги ...................................................................................................................194

Содержание  7

Часть III. Интерфейсы приложений ...........................................195

Глава 6. Приемы работы с шаблонами HTML  
и электронной почты ................................................................................196
6.1. Работа с HTML-шаблонами ........................................................................197

6.1.1. Обзор пакетов для работы с HTML-разметкой  
в стандартной библиотеке ..............................................................................197
6.1.2. Добавление функциональных возможностей в шаблоны ........199
6.1.3. Сокращение затрат на синтаксический разбор шаблонов........203
6.1.5. Соединение шаблонов ...........................................................................207

6.2. Использование шаблонов при работе с электронной почтой ..........218
6.3. Итоги ...................................................................................................................220

Глава 7. Обслуживание и получение ресурсов  
и форм ....................................................................................................................222
7.1. Обслуживание статического содержимого ............................................223
7.2. Обработка форм ...............................................................................................238

7.2.1. Введение в формы ..................................................................................238
7.2.2. Работа с файлами и предоставление составных данных ...........241
7.2.3. Работа с необработанными составными данными ......................249

7.3. Итоги ...................................................................................................................253

Глава 8. Работа с веб-службами ...................................................255
8.1. Использование REST API ............................................................................256

8.1.1. Использование HTTP-клиента ..........................................................256
8.1.2. При возникновении сбоев....................................................................258

8.2. Передача и обработка ошибок по протоколу HTTP ...........................263

8.2.1. Генерация пользовательских ошибок ..............................................264
8.2.2. Чтение и использование пользовательских сообщений  
об ошибках ...........................................................................................................267

8.3. Разбор и отображение данных в формате JSON ..................................270
8.4. Версионирование REST API .......................................................................274
8.5. Итоги ...................................................................................................................279

Часть IV. Размещение приложений в облаке ...................281

Глава 9. Использование облака ....................................................282
9.1. Что такое облачные вычисления? .............................................................283

9.1.1. Виды облачных вычислений ...............................................................283

 Содержание

9.1.2. Контейнеры и натуральные облачные приложения ...................286

9.2. Управление облачными службами ............................................................288

9.2.1. Независимость от конкретного провайдера  облачных  
услуг .......................................................................................................................289
9.2.2. Обработка накапливающихся ошибок ............................................293

9.3. Выполнение на облачных серверах ...........................................................295

9.3.1. Получение сведений о среде выполнения ......................................295
9.3.2. Сборка для облака ..................................................................................299
9.3.3. Мониторинг среды выполнения ........................................................302

9.4. Итоги ...................................................................................................................305

Глава 10. Взаимодействие облачных служб ....................306
10.1. Микрослужбы и высокая доступность ..................................................307
10.2. Взаимодействия между службами ..........................................................309

10.2.1. Ускорение REST API ...........................................................................309
10.2.2. Выход за рамки прикладного программного интерфейса  
REST .......................................................................................................................317

10.3. Итоги .................................................................................................................327

Глава 11. Рефлексия и генерация кода .................................328
11.1. Три области применения рефлексии ......................................................328
11.2. Структуры, теги и аннотации ...................................................................343

11.2.1. Аннотирование структур ...................................................................344
11.2.2. Использование тегов ...........................................................................345

11.3. Генерация Go-кода с помощью Go-кода ................................................354
11.4. Итоги .................................................................................................................361

Предметный указатель ..........................................................................363

Предисловие

Когда я услышал, что Мэтт Фарина и Мэтт Батчер начали работу над 
новой книгой о языке Go, это меня очень взволновало. Они оба много 
лет были важнейшими действующими лицами в экосистеме Go, обладают большим опытом работы и способны добавить в аромат содержания этой книги запахи специй прошлых учебных пособий. Эта 
книга должна стать преемницей книги «Go in Action», развивающей 
заложенные там основы и переводящей их в практическое русло.
Книга разбита на четыре простые в освоении части, каждая из которых имеет собственную направленность. Часть 1 освежает в памяти 
основные идеи языка Go. Если вы спешите и уже обладаете навыками, позволяющими уверенно писать код на языке Go, можете смело 
пропустить этот раздел, хотя я не рекомендую этого делать. Знакомясь с окончательным вариантом рукописи, я обнаружил в ней самородки такого размера, что, полагаю, главы этой части будут полезны 
всем читателям.
Часть 2 погружает читателя в недра механики управления Goприложениями. Глава об ошибках является одним из лучших описаний Go-ошибок из всех, прочитанных мной прежде, а глава, посвященная отладке и тестированию, содержит массу полезной информации 
об этом важном этапе разработки, помогающем поднять приложение 
с уровня, требующего доказательства идеи, до уровня надежной производственной системы.
В третьей части вы узнаете о способах создания пользовательских 
интерфейсов. Глава по шаблонам является отличным руководством 
по самой сложной, как многие полагают, части экосистемы Go. Она 
знакомит с практическими приемами многократного использования 
шаблонов и создания выразительных веб-интерфейсов. Приведенные примеры соответствуют уровню книги, поскольку трудно найти 
примеры использования шаблонов, легко переносимые в реальные 
приложения. Затем вы увидите, как создавать и использовать REST 
API, и познакомитесь с хитростями управления версиями этого API.
Заключительная часть книги посвящена теме функциональной 
совместимости, необходимой практически любому современному 
приложению. Она позволяет глубоко погрузиться в облачную инфраструктуру и увидеть, как язык Go вписывается в модель облачных 

 Предисловие

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

— Брайан Кетелсен (Brian Ketelsen),
один их авторов книги «Go in action»,
один из основателей «Gopher academy»

Введение

При первом знакомстве с языком Go мы сразу оценили его большой 
потенциал. У нас появилось желание писать на нем приложения. Но 
это был новый язык, а во многих компаниях опасаются использовать 
новые языки программирования.
Это особенно касается тех компаний, где потенциал языка Go нашел бы широкое применение. Новым языкам приходится добиваться 
доверия, признания и принятия. Сотни тысяч разработчиков заняты 
в бизнесе, лидеры которого долго колеблются, перед тем как попробовать новый язык, а разработчикам, чтобы понять его выгоды и применить в разработке приложений, необходимо достаточно хорошо 
изучить язык.
Продвижению нового языка способствуют проекты с открытым 
исходным кодом, конференции, курсы и книги. Цель этой книги – 
помочь в изучении языка Go всем желающими, внести наш вклад 
в развитие Go-сообщества и разъяснить перспективы применения 
языка Go руководству компаний, занятых в том числе разработкой 
программного обеспечения. 
Начиная работу над книгой, мы представляли ее целиком посвященной применению Go в разработке облачных приложений. Мы 
уже несколько лет работаем в сфере облачных вычислений, а Go – это 
язык, специально созданный для нее. Начав сотрудничать с издательством Manning, мы сочли возможным выйти за пределы облачных 
технологий и дополнительно охватить некоторые полезные и практичные шаблоны программирования. В результате центр внимания 
книги сместился из сферы облачных вычислений в сферу практического применения Go. Тем не менее корнями она по-прежнему уходит 
в облачные технологии.
Книга «Go на практике» – это наша попытка помочь разработчикам познакомиться с языком для продуктивного его использования, 
а также помочь развитию сообщества и способствовать улучшению 
разрабатываемого программного обеспечения.

Благодарности

На написание этой книги мы потратили около двух лет, но ее завершение стало бы невозможным без поддержки наших семей. Они 
поддерживали нас с раннего утра до позднего вечера и в выходные 
дни, когда мы целиком уходили в работу. Они были рядом, когда 
мы не писали, но были поглощены разрешением связанных с книгой 
проб лем.
Хорошие программы не пишутся в вакууме. Мы также признательны членам Go-сообщества, столь щедро отдавшим свое время 
созданию языка, его библиотек и процветанию его экосистемы. Увлекательно быть частью такого разнообразного и динамичного сообщества разработчиков. Мы, в частности, благодарим, Роба Пайка 
(Rob Pike), Брайана Кетелсена (Brian Ketelsen) и Дэйва Чейни (Dave 
Cheney), которые помогли нам на начальном этапе изучения Go. Они 
отлично справляются с ролью эмиссаров языка. Особая благодарность Брайану за предисловие к книге и одобрение нашей работы.
Мы ценим помощь множества людей, которые пожертвовали своим временем и приложили усилия к созданию этой книги. Это был 
трудный путь. Мы благодарны многим внимательным читателям, 
в том числе и нашим рецензентам, обнаружившим многочисленные 
ошибки, что позволило их своевременно исправить.
Мы хотели бы поблагодарить всех сотрудников издательства Manning, особенно нашего редактора Сусанну Клайн (Susanna Kline), 
научных редакторов Айвана Киркпатрика (Ivan Kirkpatrick), Кима 
Шириера (Kim Shrier), Гленна Бернсайда (Glenn Burnside) и Алена 
Коуниот (Alain Couniot), технического корректора Джеймса Фрасче 
(James Frasché), а также всех, кто трудился над нашей книгой. Большое спасибо рецензентам, нашедшим время на чтение нашей рукописи на различных стадиях ее готовности и написание отзывов, оказавших нам неоценимую помощь: Энтони Крампу (Anthony Cramp), 
Остину Риендо (Austin Riendeau), Брэндону Титусу (Brandon Titus), 
Дугу Спарлингу (Doug Sparling), Фердинандо Сантакосе (Ferdinando 
Santacroce), Гари А. Стаффорду (Gary A. Stafford), Джиму Амрхайну 
(Jim Amrhein), Кевину Мартину (Kevin Martin), Натану Дэвису (Nathan Davies), Квинтину Смиту (Quintin Smith ), Сэму Зайделу (Sam 
Zaydel) и Уэсу Шэддиксу (Wes Shaddix).

Благодарности  13

Наконец, мы благодарны сообществу Glide, сформировавшемуся 
за время работы над созданием диспетчера пакетов верхнего уровня 
для Go. Благодарим вас за вашу поддержку.

Я начал писать эту книгу, работая в компании Revolv, продолжил после приобретения ее компанией Google/Nest и закончил в компании Deis. Спасибо им всем за поддержку в создании этой книги. Благодарю Брайана Хардока (Brian Hardock), 
Кристиана Кавалли (Cristian Cavalli), Ланна Мартина (Lann 
Martin) и Криса Чинга (Chris Ching), всех, с кем я советовался. Мэтт Боерсма (Matt Boersma) написал полезные отзывы 
о нескольких главах. Кент Rancourt (Kent Rancourt) и Аарон 
Шлезингер (Aaron Schlesinger) подали идею для нескольких 
примеров в книге. Мэтт Фишер (Matt Fisher), Сиварам Мозики (Sivaram Mothiki), Кирзан Мала (Keerthan Mala), Хельги 
Порбьёрнссон (Helgi Þorbjörnsson) (да, Хельги, я скопировал 
и вставил это), Гейб Монрой (Gabe Monroy), Крис Армстронг 
(Chris Armstrong), Сэм Бойер (Sam Boyer), Джефф Блейел (Jeff 
Bleiel), Джошуа Андерсон (Joshua Anderson), Римас Мосевикиус (Rimas Mocevicius), Джек Фрэнсис (Jack Francis) и Джош 
Лэйн (Josh Lane) – все вы (вольно или невольно) оказали влияние на определенные фрагменты этой книги. Нельзя недооценивать влияние Мишеля Ноорали (Michelle Noorali) и Адама 
Риза (Adam Reese). Я многому научился, наблюдая за работой нескольких Ruby-разработчиков, знатоков Go. И спасибо 
Энджи (Angie), Аннабель (Annabelle), Клэр (Claire) и Кэт рин 
(Katherine) за их постоянную поддержку и понимание.

– Мэтт Батчер (Matt Butcher)

Я хотел бы поблагодарить мою красивую и удивительную 
жену Кристину, а также наших прекрасных дочерей, Изабеллу 
и Обри, за их любовь и поддержку.
Я писал эту книгу, работая в компании Hewlett Packard Enterprise, ранее называющейся Hewlett-Packard. Работая в компании 
Hewlett Packard Enterprise, я многому научился, общаясь с теми, 
кто был гораздо умнее меня. В частности, я должен поблагодарить Раджива Пандей (Rajeev Pandey), Брайана Акера (Brian 
Aker), Стива Маклеллана (Steve McLellan), Эрин Handgen (Erin 
Handgen), Эрика Густафсона (Eric Gustafson), Майка Хагедорна 
(Mike Hagedorn), Сьюзан Балле (Susan Balle), Дэвида Гравеса 

 Благодарности

(David Graves) и многих других. Они учили меня писать приложения и управлять ими, и это, безусловно, отразилось на 
данной книге.
Многие другие также оказали влияние на определенные 
фрагменты этой книги, иногда даже сами не осознавая этого. 
Благодарю Тима Плетчера (Tim Pletcher), Джейсона Буберела (Jason Buberel), Сэм Бойера (Sam Boyer), Ларри Гарфилда 
(Larry Garfield) и всех тех, кого я мог забыть.
Наконец, я хочу поблагодарить Мэтта Батчера. Я никогда не 
задумывался над тем, чтобы стать автором книги, пока ты не 
предложил мне это. Спасибо!
– Мэтт Фарина (Matt Farina)

Доступ онлайн
799 ₽
В корзину