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 можно начать буквально через пару дней после его изучения, однако, чтобы стать настоящим специалистом и использовать те возможности, которые он предлагает, наиболее эффективно, нужно большое терпение, неизменное любопытство и полное погружение в детали и особенности языка. В этой статье я описал наиболее важные темы и понятия, которые нужно изучить прежде всего, и привел ссылки на те ресурсы, которые, по моему мнению, помогут вам на этом пути лучше всего.

Удачи!

Комментарии (6)


  1. IgorLutiy
    23.04.2023 18:26
    +14

    Перед публикацией стоило бы проверить все ссылки. Официальный сайт уже более года как сменил доменное имя на https://go.dev
    Что как бы намекает по поводу всей статьи...


    1. plFlok
      23.04.2023 18:26
      +22

      Официальный сайт уже более года как сменил доменное имя

      Не ругайте chatGPT, он отстаёт на 2 года и ещё не в курсе про это событие)


  1. tba
    23.04.2023 18:26
    +3

    Что касается ООП, то тут Go немного проигрывает другим языкам – например, в нем нет классов и наследования.

    Не "немного проигрывает", а значительно выигрывает.


    1. klimkinMD
      23.04.2023 18:26

      А меня смутила вторая часть абзаца: "... таким образом создатели Go добились минимальной избыточности и обеспечили высокую скорость исполнения программ"


  1. kitako4
    23.04.2023 18:26
    +6

    (garbage collector) – алгоритм, который сканирует код на предмет объектов, замедляющих его работу

    видимо, точно chatgpt


  1. gohrytt
    23.04.2023 18:26

    Не разделяю всеобщий негатив к статье, но начать стоило с "рассматриваем кандидатов с опытом от трёх лет"