Go, или Golang, – компилируемый многопоточный язык программирования, разработанный в Google. В 2007 г. работу над ним начали Роб Пайк и Кен Томпсон с целью создать быстрый, производительный и нескучный язык, при этом не потеряв в читабельности и простоте. И в результате у них получился Go – язык, призванный упростить и ускорить разработку программного обеспечения.
В этой статье я расскажу про аспекты Golang, на которые стоит обратить внимание в первую очередь, а также приведу ссылки на современные ресурсы для изучения этого языка программирования, которые лучше всего подойдут начинающим разработчикам.
На что обратить внимание при изучении Go
Начнем с основных понятий, которые обычно входят в любой курс обучения Go:
Прежде всего, нужно иметь представление о структурах (structures или structs) и композициях структур (composition). Говоря простым языком, первое – это способ группировки объектов разных типов в одну переменную, а второе – способ объединения простых объектов и типов данных в более сложные, который в конечном итоге нужен для создания повторно используемых сегментов кода, поскольку в этом случае более сложный объект сможет использовать функции своих составных частей. И это ключевой момент в Go.
Другой немаловажный аспект – функции и методы. В Go функции не связаны ни с каким типом – в отличие от методов. Методы по сути есть те же функции, но при их определении необходимо указать получателя – аргумент того типа, к которому прикреплен метод.
Ошибки в Go возвращаются и проверяются явно. Разработчик сам определяет, какие ошибки метод может вернуть, и реализовать их обработку на вызывающей стороне. Если программа сталкивается с ошибкой, которую не предусмотрел разработчик, то в ход идут panic и recover. Первый срабатывает, когда код не может решить текущую проблему, и останавливает выполнение приложения. Recover же возвращает контроль при панике. Тогда работа приложения восстанавливается и продолжается в нормальном режиме.
Нужно также обратить внимание на стандартные библиотеки Go: fmt, net/http и другие. Название первой происходит от слова formatting, и она позволяет форматировать базовые строки, значения и другие объекты, выводить их на экран и получать данные от пользователя. Что касается net/http, то это системный пакет, помогающий разработчикам создавать веб-серверы и клиенты.
Go является языком со строгой статической типизацией, то есть у каждой переменной – свой неизменяемый тип. Это свойство работает на простоту кода, делает его легко читаемым, а кроме того, сводит к минимуму риск ошибок из-за невнимательности.
Не стоит забывать и про конкурентность (или concurrency) – форму вычислений, когда несколько инструкций выполняются, пересекаясь, в течение одного временного периода. В Go она обеспечивается за счет горутин (goroutings) и каналов (channels): первые – это функции, которые выполняются конкурентно с другими горутинами в одном адресном пространстве, а каналы позволяют передавать структурированные данные из одной горутины в другую. Основное преимущество горутин перед потоками – это их легковесность, ведь вы можете запустить сотни тысяч таких функций на одной и той же машине.
Для очистки памяти в Go, в отличие от некоторых других языков общего назначения, предусмотрен сборщик мусора (garbage collector) – алгоритм, который сканирует код на предмет объектов, замедляющих его работу, и удаляет их. Он обеспечивает высокую скорость исполнения программ и эффективное использование ресурсов.
Что касается ООП, то тут Go немного проигрывает другим языкам – например, в нем нет классов и наследования. Этому есть объяснение – таким образом создатели Go добились минимальной избыточности и обеспечили высокую скорость исполнения программ.
С точки зрения организации кода в Go он состоит из пакетов, которые разделены на модули. Модульность позволяет определять один раз пакет с нужной функциональностью и потом использовать его многократно в различных программах. Модульный код помогает не только в организации, но и в обслуживании, тестировании и – самое главное – в управлении зависимостями для борьбы с излишней сложностью приложений.
Go поддерживает автоматическое тестирование с помощью пакета testing, который используют большинство разработчиков, однако экосистема языка включает и множество других библиотек, предназначенных для тестирования, – каждый со своей спецификой. Отладка же возможна с помощью стандартного модуля GDB или его усовершенствованной альтернативы – Delve.
Теперь вы знаете, на что нужно обратить особое внимание при изучении основ Go. Самое время перейти к действиям, и у меня для вас есть подборка ресурсов, которые помогут вам учиться наиболее эффективно. Это моя личная подборка, но будьте уверены – каждый курс и каждая книга уже прошли испытание и временем, и тысячами (и даже миллионами) искушенных студентов. Поехали!
Ресурсы для изучения Go
Сайты:
Golang.org – официальный сайт Go, на котором можно найти сами установочные файлы, всю документацию по языку (golang.org/doc), обучающие статьи, книги, курсы, блог и многое другое, а также песочницу, чтобы попрактиковаться в написании кода прямо в браузере.
The Go Tour (tour.golang.org) – подраздел официального сайта и интерактивное введение в язык.
Go by Example (gobyexample.com) – еще один вводный курс, в котором основные понятия языка объясняются на простых и понятных примерах кода.
Топовые курсы:
"Go: The Complete Developer's Guide (Golang)" от Udemy. В рамках этого краткого десятичасового курса вы познакомитесь с базовым синтаксисом и структурами, понятием конкурентности, узнаете, какую задачу выполняют типы и научитесь организовывать код с помощью пакетов. Рейтинг курса на Udemy – 4.6, а количество студентов, окончивших курс, превышает 34 000, что говорит о качестве подачи материала.
"Go Fundamentals" от Pluralsight. Курс, рассчитанный на четыре часа, поможет разобраться с такими базовыми понятиями, как функции и условные операторы; вы научитесь создавать собственные типы данных с помощью structs и разберетесь с основами конкурентности с помощью горутин.
"Programming with Google Go". Более подробный и углубленный курс, размещенный на популярной площадке Coursera, который научит вас писать эффективный и чистый код на Go, создавая собственные приложения.
"Learn How To Code: Google's Go (golang) Programming Language" от Udemy. Чтобы пройти этот курс (рассчитанный на 45 часов обучения), вам не потребуется никаких предварительных навыков программирования – вы начнете с азов. Тем не менее, курс будет полезен и более опытным разработчикам: в курсе много примеров кода, упражнений и решений к ним, а еще огромный репозиторий.
"Learning Go" на LinkedIn Learning. Еще один отличный краткий вводный курс для раз��аботчиков.
“Network Programming in Golang” от Udemy. Небольшой двухчасовой курс, который позволит вам научиться создавать TCP-серверы и клиенты и пользоваться ими, чтобы передавать данные через сеть.
7) Специализация “Programming with Go” на Coursera. Специализация из трех курсов, которые покрывают базовые понятия Go; функции, методы и интерфейсы; и конкурентность.
Лучшие книги:
"The Go Programming Language" (Alan A. A. Donovan, Brian W. Kernighan). Эта книга первая в списке, так как хорошо подходит для новичков. Авторы пособия приводят сотни примеров кода на Go из реальных сценариев; упражнения подогревают интерес к новому языку, а не пугают начинающего программиста. Книга структурирована таким образом, чтобы постепенно подвести читателя от базовых понятий к более сложным темам, при этом писать код вы начнете с первых же страниц.
"Go in Action" (William Kennedy, Brian Ketelsen, Erik St. Martin). Книга рассчитана на читателей, которые уже имеют опыт программирования на других языках. Сначала в ней раскрываются все уникальные черты языка, после чего авторы предлагают читателю попрактиковаться в создании реальных приложений, включая веб-сайты и сетевые серверы, а также научиться быстро манипулировать данными и конвертировать их.
"Go Web Programming" (Sau Sheong Chang). Эта книга поможет вам разобраться, как создавать масштабируемые и высокопроизводительные веб-приложения на Go, используя современные принципы проектирования. Предполагается, что читатель уже знаком с базовыми понятиями Go и веб-разработки.
"Mastering Go" (Mihalis Tsoukalos). Книга написана для программистов, которые хотят углубиться в тонкости написания кода на Go и научиться создавать приложения для решения реальных задач. Она поможет разобраться с такими темами, как конкурентность и сборщик мусора, использовать Go с Docker, работать с JSON-файлами и взаимодействовать базами данных.
Конференции
Конечно же, изучение языка и – еще больше – работа с ним требуют полного погружения, поэтому всегда нужно быть в курсе того, что нового происходит в мире программирования, и почаще знакомиться с коллегами. В этой статье я решил поделиться еще и ссылками на самые важные и интересные конференции по Go, которые пройдут в 2023 г.:
20 апреля – CONF42: GOLANG 2023,
28 апреля – GOTHAMGO,
2 июня – GO CONFERENCE 2023,
26–29 июня – GOPHERCON EUROPE 2023,
26–29 сентября – GOPHERCON USA.
Напишите первый собственный код на Go
Как известно, учиться лучше всего на практике, поэтому после освоения азов полезно взяться за создание реальных приложений, и тут я могу посоветовать взять на прицел веб-разработку с использованием Go, поскольку этот ЯП позволяет решать множество задач, связанных с вебом. Для этого вам сначала понадобится изучить net/http – стандартный пакет для создания HTTP-серверов в Go. Испробуйте полученные знания на практике и попробуйте создать и запустить простейший веб-сервер на Go. Думаю, что после этого вам захочется еще глубже погрузиться в тему, и тут я могу порекомендовать изучить популярные фреймворки для веб-разработки в Go – Gin, Echo и Revel.
Заключение
В заключение я хочу сказать, что писать рабочий код на Go можно начать буквально через пару дней после его изучения, однако, чтобы стать настоящим специалистом и использовать те возможности, которые он предлагает, наиболее эффективно, нужно большое терпение, неизменное любопытство и полное погружение в детали и особенности языка. В этой статье я описал наиболее важные темы и понятия, которые нужно изучить прежде всего, и привел ссылки на те ресурсы, которые, по моему мнению, помогут вам на этом пути лучше всего.
Удачи!