Разработка
Слёрм

Go: хороший или плохой

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

Конечно, Go не совершенен. Но давайте по порядку.

Преимущества Go

Сейчас Golang находится на 13 месте в рейтинге языков программирования TIOBE. Очевидно, что он не вытеснит С/С++ или Python, но у него есть несколько крутых преимуществ.

Простота

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

Правда, простота может быть и минусом. Но об этом позже.

Скорость

Компиляция на С/С++ — это боль всех разработчиков. С Go всё по-другому. Здесь можно держать код “чистым”. Переменные, которые не используются, считаются ошибкой компиляции. При помощи программ здесь решается большая часть проблем форматирования. Go спроектирован с учётом приоритетности задержки и избегания больших пауз.

Многопоточное программирование

Это ещё одна особенность языка. Благодаря примитивам, заложенным в основу (горутинам и каналам), можно легко создавать многопоточные программы.

Есть дженерики

Через дженерики можно делать разные сложные вещи. Эта фича сильно влияет на производительность.

У Go большое комьюнити

Если вам не понравится или не подойдёт инструмент, то вы почти наверняка сможете найти похожий, более доработанный. Вы можете пользоваться различными библиотеками, в том числе взаимодействовать с библиотеками языка С.

Стандартная библиотека

Она особенно хороша для разработки сетевых протоколов или API. Шифрование, HTTP-клиент и сервер, отправка писем, сжатие, форматы архивирования и многое другое.

Go позволяет оптимизировать работу с базой данных

А база данных очень страдает при больших нагрузках. Особенно, если допущены неоптимальные запросы.

Статическая типизация

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

Недостатки Go

Несмотря на то, что GoLang периодически обновляется и имеет много интересных особенностей, без минусов тоже никак.

Мало документации

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

Go не сможет полностью заменить язык С

Несмотря на то, что он создавался как аналог С, он может заменить его только в некоторых задачах. Именно поэтому разработчики С переходят на Golang реже, чем с Python или Rust. Go сейчас — это, скорее, язык для web-разработки.

Простота

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

Перспективы

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

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

А ещё теперь Go работает на 20% быстрее.

Прошло 15 лет с момента появления Golang на свет, и за это время он сильно изменился. Идея заменить С отошла на второй план, теперь это самостоятельный язык с упором на web-разработку.

0
15 комментариев
Написать комментарий...
Константин Митин

Вопрос с Go, конечно, интересный. Но его нельзя обсуждать в таком контексте. Во-первых, ровно то же самое говорили года 3-4 назад. Во-вторых, преимущества и недостатки у Go немного другие. Про неиспользуемые переменные вообще повеселило, зла особого от них нет, и в С++ их сам компилятор потом исключит при оптимизации.
Пихать Go в DevOps плохая идея, это компилируемый язык, а там лучше использовать транслируемые языки (скрипты). Виртуальные машины и байт-код придумали не от нечего делать, скажем честно.
Говорить об оптимизации работы с базами данных в Go, это вообще дичайший бред. То есть мы хотим, чтобы сейчас распределенная сеть накинулась на нашу БД и заставила её большую часть времени запросы распаковывать и транзакции готовить? Заваливая её бестолковыми мелкими запросами, не давая ни планы оптимизации составить, ни статистики набрать? Круто, нечего сказать.
Если я правильно помню, Go создавали для параллельного и распределенного программирования, вводя специальные конструкции языка, чтобы обычный разработчик с параллельным программированием мог справиться. Вот это хорошее достижение и родная для Go ниша. И большие объёмы данных, за счёт распределенной сети, на Go неплохо обрабатывать.
Но это не значит, что на Go нужно писать интернет-магазины, мобильные приложения и микросервисы отправки SMS-сообщений (в смысле дергания по API SMS-провайдера).
P.S.
И вряд ли кто вообще рассчитывал, что Go заменит язык С, который любят «железячники» и те, кому приходится работать на низких уровнях. Go вообще не для этого создавался...

Ответить
Развернуть ветку
Рома Кунашко

Краткое содержание поста

Ответить
Развернуть ветку
Рома Кунашко

Как будто написали в 2015 и чуть-чуть подождали

Ответить
Развернуть ветку
Рома Кунашко

А вот это автор поставь вообще себе в рамку

Go позволяет оптимизировать работу с базой данных
Ответить
Развернуть ветку
К М
Да, приходится обновлять тип для каждой переменной.

Объявлять может быть?

Ответить
Развернуть ветку
Автостопом по Земному шарику
простота, скорость, стандартная библиотека, для web-разработки

Переизобрели PHP?

Ответить
Развернуть ветку
GMO bacteria

Тот же Апач + пхп обрабатывает запросы в 4 раза медленнее go

Ответить
Развернуть ветку
Рома Кунашко

У пхп есть стандартная библиотека для работы с сетевыми протоколами на низком уровне?

Ответить
Развернуть ветку
Женя Жуланова

Go - это 10 Умпутунов из 10

Ответить
Развернуть ветку
Юрий Б.

Go это тема, как раз начал на Степике проходить курс.

Ответить
Развернуть ветку
Non Existence

"Хороший или плохой?" ... для распределённого программирования - лучший.

Ответить
Развернуть ветку
Max A. Alexejev

помнится, про Erlang тоже такое рассказывали

Ответить
Развернуть ветку
Annie Leonhart

Почему у вас на сайте такое низкое качество банеров?

Ответить
Развернуть ветку
Александр Максимов

Очередной набор бреда.

Простота

Во-первых, кол-во wtf-деталей зашкаливает (гуглить 50 Shades of Go и прочие перлы)
Во-вторых, практика показывает что это язык где изящны только хело ворлды. Портянка из байтодрочки io ридеров и эмбедед страктов через пару месяцев абсолютно нечитабельна даже среди гоферов ее написавших.

у него есть все шансы стать номером один в web-разработке

Держи губу шире. Язык со статической типизацией никогда не станет "номером один в web-разработке", где 80% задач всегда - тупорылые крады. Как-то видел как гофер три дня херачил костыль на рефлекте из-за нечетких типов внешней апишки, что на пыхопитоне бы делалось за час. А сколько сожженых человекочасов я лицезрел при сношении программистов с пойнтерами - с бесконечными референсами диреференсов - можно целую книгу писать.

Многопоточное программирование. Это ещё одна особенность языка.

Чего-чего? 😎 Многопоточка есть везде, при желании - даже в пыхе (pthreads). Но для 99% задач веба достаточно асинхронности в один поток - а тут инструментов и подходов еще больше.

Go позволяет оптимизировать работу с базой данных

Что это значит? Там какое-то другое TCP соединение с мускулом нежели в питоне, "оптимизированное"? 😂

Ответить
Развернуть ветку
GMO bacteria

Я недавно тестировал сервер на golang и сервер на C++ boost::beast. Первый работал почти в два раза быстрее, что сильно удивило. Недавно начал изучать этот язык и думаю, что усложнять его не нужно — его можно использовать совместно с C++.

Ответить
Развернуть ветку
Читать все 15 комментариев
null