Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go

Golang для профи: работа с сетью, многопоточность, структуры данных и машинное обучение с Go

Цукалос Михалис 2020 Питер

Go является языком высокопроизводительных систем будущего.

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

Для кого предназначена эта книга

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

Часть информации из второго издания можно найти в другой книге авто ра — Go Systems Programming. Основное различие между этими двумя книгами заключается в том, что Go Systems Programming посвящена разработке системных инструментов с использованием возможностей языка Go, а «Golang для профи» — разъяснению возможностей и внутренних особенностей самого Go, что позволит вам стать лучшим разработчиком на Go. Обе книги могут служить справочниками после того, как вы их прочитаете одиндва раза.

О чем эта книга

Глава 1 «Go и операционная система» начинается с истории возникновения языка Go и его преимуществ, затем приводится описание утилиты godoc и объяснение, как компилировать и выполнять Goпрограммы. Далее речь пойдет о выводе данных24 Предисловие и получении данных от пользователя, об аргументах командной строки программы и использовании журнальных файлов. Последний раздел первой главы посвящен обработке ошибок, которая в Go играет ключевую роль.

Глава 2 «Go изнутри» посвящена сборщику мусора Go и принципам его работы. Затем поговорим о небезопасном коде и о пакете unsafe , а также о том, как вызы вать из Goпрограммы код на C, а из Cпрограммы — код на Go. Вы узнаете, как использовать ключевое слово defer , а также познакомитесь с утилитами strace(1) и dtrace(1) .

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

Глава 3 «Работа с основными типами данных Go» посвящена типам данных, предоставляемым в Go: массивам, срезам и хештаблицам, а также указателям, константам, циклам, функциям для работы с датами и временем. Вы точно не за хотите пропустить эту главу!

Глава 4 «Использование составных типов данных» начинается с изучения струк тур Go и ключевого слова struct , после чего речь пойдет о кортежах, строках, рунах, байтовых срезах и строковых литералах. Из оставшейся части главы вы узнаете о регулярных выражениях и сопоставлении с образцом, об операторе switch , па кетах strings и math/big , о разработке на Go хранилища типа «ключ — значение» и о работе с файлами форматов XML и JSON.

Глава 5 «Как улучшить код Go с помощью структур данных» посвящена разработ ке пользовательских структур данных в тех случаях, когда стандартные структуры Go не соответствуют конкретной задаче. Здесь же рассмотрено построение и приме нение бинарных деревьев, связных списков, пользовательских хештаблиц, стеков и очередей, а также их преимущества. В этой главе продемонстрировано использо вание структур из стандартного пакета Go container , а также показано, как можно использовать Go для проверки головоломок судоку и генерации случайных чисел.

Глава 6 «Неочевидные знания о пакетах и функциях Go» посвящена пакетам и функциям, в том числе использованию функции init() , стандартного Goпакета syscall , а также пакетов text/template и html/template . Кроме того, вы узнаете, как применять расширенные пакеты go/scanner , go/parser и go/token . Эта глава определенно улучшит ваши навыки разработки на Go!

В главе 7 «Рефлексия и интерфейсы на все случаи жизни» обсуждаются три пере довые концепции Go: рефлексия, интерфейсы и методы типов. Кроме того, в этой главе описываются объектноориентированные возможности Go и способы отладки Goпрограмм с помощью Delve.

Глава 8 «Как объяснить UNIXсистеме, что она должна делать» посвящена системному программированию на Go. Здесь рассматриваются такие темы, как пакет flag для работы с аргументами командной строки, обработка сигналов UNIX, файловый ввод и вывод, пакеты bytes , io.Reader и io.Writer , а такжеО чем эта книга 25 обсуждается использование пакетов Viper и Cobra Go. Напомню: если вы дей ствительно увлекаетесь системным программированием на Go, то я настоятельно рекомендую вам после прочтения этой книги приобрести и прочесть Go Systems Programming!

В главе 9 «Конкурентность в Go: горутины, каналы и конвейеры» обсуждаются горутины, каналы и конвейеры — то, что позволяет реализовать конкурентность на Go. Вы также узнаете, чем различаются между собой процессы, потоки и горутины, познакомитесь с пакетом sync и особенностями работы планировщика Go.

Глава 10 «Конкурентность в Go: расширенные возможности» является про должением предыдущей главы. Прочитав ее, вы станете повелителем горутин и каналов! Вы глубже изучите планировщик Go, научитесь использовать мощное ключевое слово select , узнаете о различных типах каналов Go, а также о разделяе мой памяти, мьютексах, типах sync.Mutex и sync.RWMutex . В последней части главы говорится о пакете context , пулах обработчиков и о том, как распознать состояние гонки (race conditions)

. В главе 11 «Тестирование, оптимизация и профилирование кода» обсуждаются тестирование, оптимизация и профилирование кода, а также кросскомпиляция под разные платформы, создание документации, тестирование производительности Goкода, создание тестовых функций и поиск неиспользуемого Goкода.

Глава 12 «Основы сетевого программирования на Go» посвящена пакету net/ http и тому, как разрабатывать вебклиенты и вебсерверы на Go. Далее рас смотрены структуры http.Response , http.Request и http.Transport , а также тип http.NewServeMux . Вы даже узнаете, как разработать на Go целый вебсайт! Кроме того, в этой главе вы научитесь читать конфигурацию сетевых интерфейсов и вы полнять на Go DNSпоиск, а также использовать с Go gRPC.

В главе 13 «Сетевое программирование: создание серверов и клиентов» расска зывается о работе с HTTPSтрафиком и создании на Go серверов и клиентов UDP и TCP с использованием функций из пакета net . Здесь же рассмотрены такие темы, как построение клиентов и серверов RPC, разработка на Go многопоточного TCP сервера и чтение «сырых» сетевых пакетов.

В главе 14 «Машинное обучение на Go» рассказывается о реализации на Go алгоритмов машинного обучения, включая классификацию, кластеризацию, об наружение аномалий, выбросы, нейронные сети и TensorFlow, а также работу Go с Apache Kafka. Эту книгу можно разделить на три логические части.

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

Вторая часть начинается с главы 5 и включает в себя главы 6 и 7. Эти три главы посвящены организации Goкода в виде пакетов и модулей, структуре Goпроектов и некоторым дополнительным функциям Go.

Последняя часть включает в себя оставшиеся семь глав и посвящена более практическим темам Go.

В главах 8–11 рассказывается о системном программировании на Go, реализации конкурентности на Go, тестировании, оптимизации и профилировании кода. В последних трех главах этой книги речь идет о сетевом программировании и машинном обучении на Go. Книга включает в себя материалы о Go и WebAssembly, использовании Docker с Go, создании профессиональных утилит работы с командной строкой с помощью пакетов Viper и Cobra, обработке JSON и YAML, выполнении операций с матрицами, работе с головоломками судоку, пакетами go/scanner и go/ token , а также с git(1) и GitHub, пакетом atomic , об использовании в Go gRPC и HTTPS.

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

Поскольку контейнеры и Docker очень важны, я включил в эту книгу примеры исполняемых Go-файлов, которые используются в образах Docker, ведь образы Docker являются отличным способом развертывания серверного программного обеспечения.

Для того чтобы скачать книгу, Вам необходимо Авторизоваться или пройти Регистрацию

Раскрыть комментарии 0

Пока к этой статье нет комментариев

Чтобы оставить комментарий , Вам необходимо Авторизоваться или пройти Регистрацию