Написать пост

Стоит ли изучать Golang и если да, то как — отвечают эксперты

Аватар Никита Прияцелюк

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

Go сравнительно молодой язык, и многие программисты, как новички, так и опытные, могут сомневаться в целесообразности его изучения. Стоит ли его изучать и если да, то как? Узнаем у экспертов.

В настоящее время, Go — один из самых популярных языков программирования, применяющийся как в web-разработке, так и в системном программировании. Его главные преимущества: строгая типизация, широкие возможности стандартной библиотеки языка (работа с HTTP, HTML, JSON…), а также высокая производительность.

Значительная часть ПО, связанная с современными web-архитектурами, написана на Go: Docker, Kubernetes, Prometheus… Также Go нашел своё применение в разработке микросервисных приложений как язык, который позволяет быстро и удобно писать отдельные компоненты распределённой системы.

Начать обучение этому языку мы, естественно, рекомендуем с самого известного туториала: a Tour of Go. Затем выбор огромный — существует множество литературы, интернет-порталов, сообществ… Но не забывайте: лучший учебник — это исходный код.

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

Конечно, у него есть свои недостатки, но в своём большинстве они не очень критичные:

  • Лично мне не очень нравится обработка ошибок. В отличие от привычного использования try/catch во многих языках, в Go постоянно приходится делать так:func openFile() (*os.File, error) { f, err := os.Open("filename.ext") if err != nil { log.Fatal(err) return nil, err } return f, nil}А затем обрабатывать этот err во всех функциях, вызывающих openFile. Хотя наверняка найдутся и те, кому подобная обработка ошибок придётся по вкусу. ?
  • Более серьёзным недостатком, на мой взгляд, является далеко не самая удобная работа с зависимостями из-за отсутствия в Go централизованного репозитория с пакетами. Существуют инструменты, упрощающие работу с зависимостями, но всё же это менее удобно, чем работа с пакетными менеджерами других языков.

Можно вспомнить ещё некоторые недочёты Go, но все они перекрываются его достоинствами:

  • Исходный код компилируется в бинарный файл, что значительно повышает производительность вашего приложения. Также это ОЧЕНЬ удобно при деплое приложения — нет нужды предварительно устанавливать необходимые зависимости, достаточно просто перенести исполняемый файл на вашу площадку и запустить его.
  • Go довольно прост для изучения — он имеет понятный синтаксис и хорошую документацию, которая читается без большого труда и не оставляет после себя много вопросов.
  • Особенно хочется выделить многопоточность в Go — она великолепна! Горутины (goroutines) и каналы (channels), инструменты Go для работы с потоками несут в себе одновременно легкость и практичность, а разработчику они дарят, в основном, только положительные эмоции. ?

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

Я думаю, что стоит потратить своё время на изучение Go. Он востребован, о чём говорит большое количество вакансий для Go-разработчиков. Также я заметил, что многие компании частично переходят, например, с Python на Go в целях повышения производительности. Так что, если вы устроитесь разработчиком на Python, то не исключено, что вы столкнетесь с Go. ? Плюс ко всему — разработкой Go занимается компания Google, что в каком-то смысле даёт веру в дальнейшее успешное развитие языка.

Язык программирования Go имеет смысл изучать как начинающим специалистам, так и разработчикам с опытом работы.

Если вы начинающий разработчик, то Go прекрасно подойдёт для старта:

  • в нём простой и немногословный синтаксис;
  • строгие и единообразные правила написания кода;
  • вам не нужно заучивать сотни хитроумных вариаций написания того же самого кода, но с более коротким синтаксисом.

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

Если вы программист с опытом, то изучать Go можно как минимум по двум причинам:

  • Этот язык приносит некоторые концепции и подходы, позволяющие нам эффективнее строить и саму разработку, и работу с конкурентностью. Это связано с тем, что задача современного софта — большое количество сетевых операций, желательно в неблокирующем режиме (если мы говорим о бэкенде). Сами же концепции не новы, например идея легковесных потоков, которые в Go называются goroutines, существует достаточно давно. Эти идеи находят отражение и в других языках (корутины в Kotlin), поэтому к ним стоит присмотреться.
  • Всё больше компаний используют Go для миграции с так называемых традиционных языков для оптимизации своих сетевых приложений, поэтому вы можете перенять этот опыт и добиться снижения расходов, увеличения производительности и т. д.

Как и где изучать Go

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

Начать стоит с базовых вещей: основы синтаксиса и стандартной библиотеки, а затем уже решать практические задачи с использованием СУБД, веба и всего остального.

При этом у Go есть свои преимущества и недостатки.

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

Недостатки: иногда не хватает возможности написать что-то короче («продвинутых конструкций»), не хватает ряда возможностей в самом языке (generic’и), но их обещают добавить.

Не стоит думать, что Go — это «убийца всех языков». Ни Java, ни C++, ни остальные языки никуда не исчезнут, но у Go своя ниша: системные приложения, утилиты автоматизации, сетевые сервисы и бэкенд.

На рынке труда в вакансиях на Go достаточно часто пишут «желание изучить и перейти на Go», т. е. специалистов не хватает и компании готовы доучивать их самостоятельно.

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

Если вы планируете своё профессиональное будущее в бэкенд-разработке, то язык Go изучать стоит однозначно.

Лучше всего начинать с книги «Язык программирования Go» от авторов языка, а также онлайн-туториала «A tour of go». Если опыта программирования нет вообще, неплохо ещё будет посмотреть курс от Mail.ru на Coursera.

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

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

На рынке труда Go является одним из самых востребованных языков для бэкенд-разработки и популярность его растёт год от года. В настоящее время даже IT-тяжеловесы, такие как Mail Group или Yandex, постепенно переводят свою инфраструктуру на Go.

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

В настоящее время специалисты, знающие PHP и Go, востребованы на рынке.

Привязываться к языку — дилетантство. Хороший программист знает несколько языков и легко учит новые. Если фундаментальные знания разработки у специалиста крепкие, он может писать хорошо на любом языке. Поэтому начинающим программистам следует скорее определяться с направлением деятельности: web, native, mobile, micro и т. д. Изучить однозначного лидера в направлении, а потом задумываться о других языках.

Три главных преимущества Go, которые объясняют его популярность: простота, стандартная библиотека и то, что он даёт возможность для параллельного, или конкурентного, программирования. Go был разработан в Google как альтернатива С и С++. Язык задумывался как компилируемый язык, не требующий интерпретатора (как, например, Python). Его можно собрать у себя на компьютере под практически любую архитектуру (MILS или ARM), отправить на сервер и запустить. У Go высокая скорость и простой синтаксис, который может выучить за один месяц даже начинающий.

Язык Go достаточно читаем. В библиотеке есть некоторые «фишки», которые можно использовать в работе над разными проектами. Там есть всё, что связано с сетями, благодаря чему можно не использовать API LINUX. На Go написано много современных вещей: Docker, Project Mobi,система кластеризации Kubernetes, система мониторинга Prometheus, много консольных утилит. У языка хорошая поддержка параллельных вычислений.

Ещё одно преимущество — пакетный менеджер. У Go есть система автодокументирования кода, внутренний профилировщик, внутренняя система написания тестов, то есть всё то, что в других языках программирования нужно было бы добавлять.
Сейчас Go очень популярен: на нём мало кто умеет писать, а вакансий — много. Go является пятым официальным языком в Google после Python, Java, С++ и JavaScript.

Go используют такие IT-корпорации, как Яндекс, ВКонтакте, Mail, Avito. Это красивый, быстрый и удобный язык, который позволяет писать сложные программы.

Go — очень дружественен к новичкам, но моё мнение — лучше иметь и другие технологии в запасе. И вот почему: Go — это, что называется, opinionated stuff — дизайн языка идёт на достаточно серьёзные ограничения, и зачастую выбор принимается не сообществом, а разработчиками самого языка. И понять причину, почему то или иное решение принято, может оказаться нелегко, если опыт не позволяет найти примеры из прошлого. Многие решения в дизайне языка приняты для того, чтобы максимально избежать двусмысленности и неопределённости, и по-настоящему это можно оценить только тогда, когда уже есть какой-то опыт.

На мой взгляд, Golang — это, если позволите, новый Java. Это вполне себе зрелый язык программирования для написания enterprise-приложений. Многих коллег с ООП-бэкграундом смущает отсутствие классов как таковых, однако это не мешает пользоваться знакомыми практиками, SOLID например. Сейчас ситуация такова, что если вы видите в проекте Golang, то с вероятностью 99 % это значит, что Go взяли на борт ради микросервисов. В первую очередь потому, что «microservices is new black», хотя существуют и другие причины. Например, многие широко используемые инструменты уже написаны на Go: Docker, Kubernetes, HashiCorp projects (Consul, Vault и т. д.). Однако я знаю компании, которые вполне обоснованно выбрали Go в качестве языка программирования, и при этом разрабатывают решения с монолитной архитектурой.

Начать изучение Go стоит с ресурсов «Tour of go» и «Go by example». Если вы не против прочитать книгу, то «Язык программирования Go» за авторством Алана Донована и Брайана Кернигана вам в помощь. После этого рекомендую зайти на официальный блог Go и блог Дейва Чейни. Многие вопросы отпадут, если вы начнете своё знакомство с этими ресурсами со статей «Errors are values» и «Functional options».

Что стоит изучить помимо самого Go? Помимо самых стандартных вещей в духе реляционных баз данных, настоятельно рекомендую познакомиться с Docker, Swagger, gRPC. Docker вам понадобится почти 100 % (это утверждение в целом справедливо и не для Go-проектов). А вот со Swagger, gRPC и прочими подобными контрактами ситуация чуть интересней. В Go нет больших фреймворков в духе Spring/RoR, есть нишевые фреймворки, которые существенно облегчат ту или иную задачу, не более. Однако здесь на помощь приходит кодогенерация. Помимо генерации всяких enum-ов, вы можете сгенерировать как клиент, так и сервер, используя Swagger, protobuf или GraphQL, то есть генератор выступает в роли фреймворка. Вам останется только имплементировать сами хэндлеры (Handler), так называемые обработчки. Это позволяет уделять больше внимания коммуникации приложений, не фокусируясь на возможностях и недостатках языках. Это не серебряная пуля, конечно, но работает достаточно хорошо. Имплементировать свой суперклассный zero-allocation-роутер — это всегда весело, но куда веселей поднимать программы.

Что касается ситуации на рынке труда: пару лет назад 8 из 10 вакансий по Go были от криптостартапов, общее число вакансий не впечатляло. Сейчас Golang-вакансий гораздо больше, но почти всегда требуется опыт работы с другими языками программирования — как раз по причине переписывания с языка X на Go. Мой личный топ вспомогательных языков – PHP, Java, Ruby. Можно встретить и чисто Go-вакансии, их появляется всё больше, что не может не радовать.

Golang относительно молодая технология, потому мир enterprise с опаской принимает её, но мне кажется, это неминуемо произойдёт.

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

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

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

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

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

Изучение Go стоит начать с его спецификации на официальном сайте (она, к слову, довольно компактная и содержит много примеров), после чего можно подобрать учебник в соответствии со своим уровнем. Книг по Go очень много, есть варианты как для начинающих, так и для продвинутых разработчиков. А для дальнейшего освоения языка на практике можно использовать связку «курсы по Go + параллельная разработка своего пет-проекта».

Итак, стоит ли учить Go и если да, то как?

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

Разобраться с основами языка помогут такие ресурсы, как «Tour of go» и «Go by example». Книг по Go хватает как для начинающих, так и для продвинутых разработчиков; можете обратить внимание на «Язык программирования Go» от авторов языка. Также не будет лишним посетить официальный блог Go и блог Дейва Чейни. Ну и не забывайте про практику, само собой.

Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.

Следите за новыми постами
Следите за новыми постами по любимым темам
60К открытий60К показов