Популярные вопросы
про Golang
Для чего нужен этот язык программирования?
Как обстоят дела с тулингом?
Подходит ли Go для старта в разработке?

Интервью с экспертами:
спикеры конференции Podlodka Go Crew
рассказывают о работе с Golang
Мы поговорили с участниками программного комитета конференции Podlodka Go Crew о том, как устроен Go, легко ли влиться в комьюнити и какие у этого языка возможности и ограничения.
Вопрос
Где применяется и какие задачи решает Go?
Go (часто также "golang") используется в любых задачах, связанных с сетью, ведь одна из сильных сторон языка — стандартная библиотека для работы с ней.


Илья Данилкин
Авито
Go достаточно широко применяется во всех задачах, связанных с сетью или утилитами — отличными примерами являются микросервисы, Docker, Kubernetes. Внутри языка есть отличный стандартный пакет net/http и другие сторонние библиотеки, расширяющие возможности языка. Также многое, что связано с работой ОС, например, менеджеры пакетов или системы сборок, написано на нём — всё это сферы, в которых применяется Go.

Есть и более нишевые примеры применения, например, геймдев — подробно мы говорили об этом на открытой сессии с Искандером Шариповым. Есть неплохой набор библиотек, чтобы делать простые 2D-игры (та же Ebitengine).

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


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

Язык Go довольно прост. Если есть опыт программирования, на нём можно начать писать код уже через пару дней. Без опыта выучить его тоже будет несложно, уже скоро вы начнете писать на нём простые приложения.

Но есть аспекты языка, которые могут стать проблемой для новичков в разработке. В первую очередь это garbage collector, который скрывает от программиста много операций по управлению памятью. Новичкам лучше разобраться, как работает управление памятью. Тем, кто изучает программирование, это будет полезно.


Илья Данилкин
Авито
Думаю, что Go подходит как первый язык программирования. Он не настолько сложный для входа, чтобы вызывать проблемы. Тем более многие вещи в нём доступны «из коробки», то есть человеку надо меньше думать о точке с запятой в конце линии, о форматировании кода — всё это сделает за него IDE и вспомогательные утилиты - форматтеры, сортировщики импортов и linter'ы. У Go комфортный подход к кодстайлу и набор гайдлайнов от Google.

Из минусов — нужно возиться со сложностями в обработке ошибок. Кому-то могут быть непривычны паттерны языка. В школах учат Pascal или в лучшем случае Python. Но Python — скриптовый язык, Go — типизированный, они очень разные. Также я бы сказал, что Go — язык из серии "easy to learn, hard to master", то есть порог входа маленький, но для того, чтобы начать писать на хорошем уровне, уйдёт достаточно много времени.

В сумме это делает его неплохим кандидатом в качестве первого языка.


Илья Горкун
red_mad_robot
Я думаю, ошибочно говорить, что Go — простой язык, хотя многие его так позиционируют. Говорят, что он легко читаемый и в нём мало конструкций. Но простой он в контексте примитивности методов и конструкций языка. Его простота в этом, а не в том, что его легко «готовить» и поддерживать.

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

В Go нет сурового понимания ООП, он не функциональный, не строгий, как Haskel или Scala. Он иногда заставляет писать много кода и в нем выше риск "выстрелить себе в ногу", чем в Python или Java. Избежать этого можно, только понимая, что именно делаешь.

Начинающим я бы посоветовал более мейнстримные языки — такие как Java, Python, JS. А после них уже, по необходимости, можно погружаться в Go.
Вопрос
Где задавать вопросы о языке?
За время существования языка Go в сети сформировалось открытое сообщество с множеством поклонников языка по всему миру. Численность комьюнити всё ещё отстаёт от мейнстримных языков, но постоянно растёт. Можно задавать вопросы на Stack Overflow и форумах — вы точно получите ответ от опытных разработчиков. Для тех, кто знает английский язык, выбор каналов и сообществ больше. Но и русскоязычное сообщество многочисленно. Например, в Telegram-канале Golang — 8 тысяч человек.


Илья Горкун
red_mad_robot
Как человек, который пришёл из JavaScript, я заметил, что Go пока не на волне хайпа на конференциях. В комьюнити нет таких известных людей, как Илья Климов. Это объясняется двумя вещами: язык появился не так давно, да и фронтенд-ниша старше, чем разработка бэкенда на Go с микросервисными подходами и прочим.

JavaScript — монополист во фронтенде, а Go — лишь один из многих вариантов для написания бэкенда, поэтому и численность сообщества меньше. Но я считаю, что это никак не влияет на комьюнити. Ты всегда можешь найти интересные англоязычные YouTube-каналы, например, @JustForFunc, @boldlygo, @GolangDojo, @GopherConUK и Telegram-сообщества, например, @golang.

Да и в России огромное количество крупных компаний используют Go: Ozon, Lamoda, VK. Люди, которые активно пишут коммерческие проекты на этом языке, делятся своими знаниями в Telegram-каналах, выступают на митапах и конференциях. Я стал замечать, что за последние полтора года на YouTube и на Habr значительно вырос объём русскоязычного контента про Go.


Илья Данилкин
Авито
Go объединяет огромное количество разработчиков по всему миру, в том числе в России. Очень легко найти ответ на вопрос на Stack Overflow и различных форумах. В Google Groups есть форум golang-nuts, где можно задавать вопросы. Отвечают все, включая разработчиков из Google и создателей языка. Новичкам помогают разобраться в любых вопросах.

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


Илья Горкун
red_mad_robot
Бытует мнение, что библиотека инструментов Go беднее, чем у Python или Java. Я полностью согласен. Причина в том, что это относительно новый язык, у которого отличается методология разработки и поддержки, философия применения.

Разрабатывая программу на Go, мы часто изобретаем велосипед. Потому что, согласно философии языка, лучше написать что-то маленькое и своё, чем использовать то, что написано другим разработчиком и залито на Github. Сам язык говорит, что это не Go way — не путь языка, такое выражение используют известные в этой среде специалисты.

Сам по себе язык не может удовлетворять всем возможным обобщениям. Например, Java Spring повёрнут на рефлексии, ведь как иначе написать универсальный фреймворк, который подходит для любого бэкенда? К сожалению, рефлексия и различные антипаттерны — тоже не Go way, потому что ценности Go — изящность и производительность.

В результате, если у Go есть библиотеки, то они узкоспециализированные — как Ableton, c коллекциями и узкими кейсами. Но мне кажется, что всегда нужно задавать вопрос: а стоит ли подтягивать целую библиотеку, если можно просто написать маленькую часть того, что нужно? Иногда тулинги пытаются удовлетворить потребности конкретно ваших задач и доменной области. И тогда используют рефлексию — например, Gorm, самую популярную ORM. Но более «трушные» Golang-разработчики всё равно пытаются уходить в кодогенерацию.

Кодогенерация — настоящая отдушина. Для этого у нас есть различные swagger-codegen, openAPI-codegen и SQL-билдеры. И что-то похожее на ORM — как Ent от запрещённой в России компании Meta, которая безумно классно умеет генерировать по вашей модели конкретный код из БД под те типы и тот нейминг, которые заданы в схеме. Таким образом мы совершенно не пользуемся рефлексией и даже имеем статический анализ SQL-запросов.


Илья Данилкин
Авито
Обычно самые популярные библиотеки помогают справиться с написанием кода, избежать огромного количества дублирования или добавить полезный функционал. В случае с Go это разнообразные логгеры, потому что в стандартной библиотеке до последнего времени был достаточно скудный логгер без структурных json-логов и прочего. Чтобы обойти это, появлялись проекты типа zap, logrus.

Помимо этого распространено использование библиотек, помогающих работать с тестами, — это либы testify, assert и require. Эти наборы нужны, чтобы тест выглядел лучше, а код, который находится в тестах, был более понятным. Есть библиотеки, которые помогают развивать TDD или даже BDD, — ginkgo и gomega.

Часто можно увидеть библиотеки, работающие с сущностями внутри кода. Например, с конфигурациями работает viper и envconfig.

Тяжело перечислить всё, потому что популярных библиотек очень много. Есть отличный ресурс Awesome Go, в котором по секциям на каждую группу инструментария доступен набор самых популярных репозиториев и проблем, которые они решают. Там можно найти ответ на вопрос, какая библиотека вам нужна сейчас, под решение конкретной задачи.
Вопрос
Каких изменений ждут в комьюнити?
Новые релизы выходят каждые полгода. Разработчики дождались поддержки дженериков и теперь рассчитывают на улучшение возможностей взаимодействия с ними.
Возможно, в ближайшее время изменится процесс работы с ошибками.


Илья Данилкин
Авито
Go обновляется достаточно часто. Регулярно поддерживаются две минорные версии языка — сейчас это 1.19 и 1.18. Обычно новая минорная версия выходит через каждые полгода — ранними весной и осенью.

Уязвимости, как правило, фиксятся очень быстро. После их обнаружения соблюдается стандартный процесс CVE.

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

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


Эмиль Шарифуллин
Сбермаркет
Язык Go обновляется два раза в год. У него очень чёткий жизненный цикл, который позволяет получать релизы регулярно. Сообщество действительно ждёт новой версии языка каждые полгода, потому что с каждым обновлением вводятся «вкусные» изменения.

Последней на сегодняшний день долгожданной фичей была поддержка дженериков. Но она пришла в Go не совсем в том виде, в каком ожидали. Сейчас, возможно, сообщество рассчитывает на поддержку дженериков на более высоком уровне.

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


Илья Данилкин
Авито
С тулчейном у Go исторически всё сложилось хорошо. У языка есть то, что необходимо в современной разработке: поддержка зависимостей через модули, автоматическая установка бинарников через go install. Не требуется скачивать софты и гонять бэкфайл. А нода на Go ставится через go install и указание версии.

Поддержка языка в IDE, как правило, очень хорошая. Разных IDE много — начиная от расширений для редакторов вида vim и заканчивая полноценными IDE вида GoLand. Есть Visual Studio Code с отличной поддержкой Go на основе языкового LSP-сервера gopls. С недавних пор расширение для Go официально поддерживает Google, ранее это делала компания Microsoft.

У языка отличная поддержка дебаггинга, отладки. Можно поднять Instance сервера IDE, например VS Code, прямо внутри контейнера. В таком случае IDE превращается в лёгкий клиент, в котором можно заниматься дебаггингом или разработкой прямо изнутри контейнеров.

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

Я считаю, что это один из самых больших, масштабных наборов утилит и вообще тулчейна среди современных языков.


Эмиль Шарифуллин
Сбермаркет
Создатели Go сразу, вместе с самим языком программирования выкладывали много полезных утилит, которые помогают в разработке. На основе этих утилит в дальнейшем создавались плагины для поддержки языка Go в тех или иных средах. Но не будем забывать, что Go вышел в 2009 году. В то время было непростой задачей создать новый язык и поддерживать его в разных IDE. Даже для Python нормальный плагин для Visual Studio появился только в 2013 году. До этого единственной хорошей IDE был PyCharm.

Так что у Go поддержка началась с того, что авторы делали консольные утилиты. Сейчас же Go поддерживается многими средами разработки и редакторами. Достаточно утилит написано и сторонними разработчиками, что помогает при разработке своих сервисов на Go.
Узнай больше о работе с Go на нашей конференции!
Стартуем 6 февраля!