Go, или Golang, – компилируемый многопоточный язык программирования, разработанный в Google. В 2007 г. работу над ним начали Роб Пайк и Кен Томпсон с целью создать быстрый, производительный и нескучный язык, при этом не потеряв в читабельности и простоте. И в результате у них получился Go – язык, призванный упростить и ускорить разработку программного обеспечения.

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

На что обратить внимание при изучении Go

Начнем с основных понятий, которые обычно входят в любой курс обучения Go:

  1. Прежде всего, нужно иметь представление о структурах (structures или structs) и композициях структур (composition). Говоря простым языком, первое – это способ группировки объектов разных типов в одну переменную, а второе – способ объединения простых объектов и типов данных в более сложные, который в конечном итоге нужен для создания повторно используемых сегментов кода, поскольку в этом случае более сложный объект сможет использовать функции своих составных частей. И это ключевой момент в Go.

  2. Другой немаловажный аспект – функции и методы. В Go функции не связаны ни с каким типом – в отличие от методов. Методы по сути есть те же функции, но при их определении необходимо указать получателя – аргумент того типа, к которому прикреплен метод.

  3. Ошибки в Go возвращаются и проверяются явно. Разработчик сам определяет, какие ошибки метод может вернуть, и реализовать их обработку на вызывающей стороне. Если программа сталкивается с ошибкой, которую не предусмотрел разработчик, то в ход идут panic и recover. Первый срабатывает, когда код не может решить текущую проблему, и останавливает выполнение приложения. Recover же возвращает контроль при панике. Тогда работа приложения восстанавливается и продолжается в нормальном режиме.

  4. Нужно также обратить внимание на стандартные библиотеки Go: fmt, net/http и другие. Название первой происходит от слова formatting, и она позволяет форматировать базовые строки, значения и другие объекты, выводить их на экран и получать данные от пользователя. Что касается net/http, то это системный пакет, помогающий разработчикам создавать веб-серверы и клиенты.

  5. Go является языком со строгой статической типизацией, то есть у каждой переменной – свой неизменяемый тип. Это свойство работает на простоту кода, делает его легко читаемым, а кроме того, сводит к минимуму риск ошибок из-за невнимательности.

  6. Не стоит забывать и про конкурентность (или concurrency) – форму вычислений, когда несколько инструкций выполняются, пересекаясь, в течение одного временного периода. В Go она обеспечивается за счет горутин (goroutings) и каналов (channels): первые – это функции, которые выполняются конкурентно с другими горутинами в одном адресном пространстве, а каналы позволяют передавать структурированные данные из одной горутины в другую. Основное преимущество горутин перед потоками – это их легковесность, ведь вы можете запустить сотни тысяч таких функций на одной и той же машине.

  7. Для очистки памяти в Go, в отличие от некоторых других языков общего назначения, предусмотрен сборщик мусора (garbage collector) – алгоритм, который сканирует код на предмет объектов, замедляющих его работу, и удаляет их. Он обеспечивает высокую скорость исполнения программ и эффективное использование ресурсов.

  8. Что касается ООП, то тут Go немного проигрывает другим языкам – например, в нем нет классов и наследования. Этому есть объяснение – таким образом создатели Go добились минимальной избыточности и обеспечили высокую скорость исполнения программ.

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

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

Теперь вы знаете, на что нужно обратить особое внимание при изучении основ Go. Самое время перейти к действиям, и у меня для вас есть подборка ресурсов, которые помогут вам учиться наиболее эффективно. Это моя личная подборка, но будьте уверены – каждый курс и каждая книга уже прошли испытание и временем, и тысячами (и даже миллионами) искушенных студентов. Поехали!

Ресурсы для изучения Go

Сайты:

  1. Golang.org – официальный сайт Go, на котором можно найти сами установочные файлы, всю документацию по языку (golang.org/doc), обучающие статьи, книги, курсы, блог и многое другое, а также песочницу, чтобы попрактиковаться в написании кода прямо в браузере.

  2. The Go Tour (tour.golang.org) – подраздел официального сайта и интерактивное введение в язык.

  3. Go by Example (gobyexample.com) – еще один вводный курс, в котором основные понятия языка объясняются на простых и понятных примерах кода.

Топовые курсы:

  1. "Go: The Complete Developer's Guide (Golang)" от Udemy. В рамках этого краткого десятичасового курса вы познакомитесь с базовым синтаксисом и структурами, понятием конкурентности, узнаете, какую задачу выполняют типы и научитесь организовывать код с помощью пакетов. Рейтинг курса на Udemy – 4.6, а количество студентов, окончивших курс, превышает 34 000, что говорит о качестве подачи материала.

  2. "Go Fundamentals" от Pluralsight. Курс, рассчитанный на четыре часа, поможет разобраться с такими базовыми понятиями, как функции и условные операторы; вы научитесь создавать собственные типы данных с помощью structs и разберетесь с основами конкурентности с помощью горутин. 

  3. "Programming with Google Go". Более подробный и углубленный курс, размещенный на популярной площадке Coursera, который научит вас писать эффективный и чистый код на Go, создавая собственные приложения.

  4. "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; функции, методы и интерфейсы; и конкурентность.

Лучшие книги:

  1. "The Go Programming Language" (Alan A. A. Donovan, Brian W. Kernighan). Эта книга первая в списке, так как хорошо подходит для новичков. Авторы пособия приводят сотни примеров кода на Go из реальных сценариев; упражнения подогревают интерес к новому языку, а не пугают начинающего программиста. Книга структурирована таким образом, чтобы постепенно подвести читателя от базовых понятий к более сложным темам, при этом писать код вы начнете с первых же страниц.

  2. "Go in Action" (William Kennedy, Brian Ketelsen, Erik St. Martin). Книга рассчитана на читателей, которые уже имеют опыт программирования на других языках. Сначала в ней раскрываются все уникальные черты языка, после чего авторы предлагают читателю попрактиковаться в создании реальных приложений, включая веб-сайты и сетевые серверы, а также научиться быстро манипулировать данными и конвертировать их.

  3. "Go Web Programming" (Sau Sheong Chang). Эта книга поможет вам разобраться, как создавать масштабируемые и высокопроизводительные веб-приложения на Go, используя современные принципы проектирования. Предполагается, что читатель уже знаком с базовыми понятиями Go и веб-разработки.

  4. "Mastering Go" (Mihalis Tsoukalos). Книга написана для программистов, которые хотят углубиться в тонкости написания кода на Go и научиться создавать приложения для решения реальных задач. Она поможет разобраться с такими темами, как конкурентность и сборщик мусора, использовать Go с Docker, работать с JSON-файлами и взаимодействовать базами данных. 

Конференции

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

  1. 20 апреля – CONF42: GOLANG 2023,

  2. 28 апреля – GOTHAMGO,

  3. 2 июня – GO CONFERENCE 2023,

  4. 26–29 июня – GOPHERCON EUROPE 2023,

  5. 26–29 сентября – GOPHERCON USA.

Напишите первый собственный код на Go

Как известно, учиться лучше всего на практике, поэтому после освоения азов полезно взяться за создание реальных приложений, и тут я могу посоветовать взять на прицел веб-разработку с использованием Go, поскольку этот ЯП позволяет решать множество задач, связанных с вебом. Для этого вам сначала понадобится изучить net/http – стандартный пакет для создания HTTP-серверов в Go. Испробуйте полученные знания на практике и попробуйте создать и запустить простейший веб-сервер на Go. Думаю, что после этого вам захочется еще глубже погрузиться в тему, и тут я могу порекомендовать изучить популярные фреймворки для веб-разработки в Go – Gin, Echo и Revel.

Заключение

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

Удачи!