Всем привет!
В далёком 2007 году программисты Google начали задумываться, какой язык программирования лучше всего подходит для создания мощных и надёжных систем. Им нужно было управлять миллионами строк кода, которые бы обрабатывали и передавали данные по всему миру. Существующие языки программирования не совсем справлялись с этими задачами — они были созданы для управления настольными компьютерами или игр, а не для масштабных сетевых операций. Так родилась идея создания нового языка, который стал известен как Golang.
История создания Golang
Golang, или Go, был создан для решения конкретных задач: эффективного управления вводом и выводом данных, обеспечения безопасности и надёжности кода. Публичные версии языка начали появляться в 2009 году, а первый релиз 1.0 был выпущен в 2012 году. На сегодняшний день Google продолжает активно развивать язык, и последняя стабильная версия на момент написания статьи — 1.22.5.
Golang получил широкое признание как внутри Google, так и за его пределами. Язык вошёл в топ-10 рейтинга Tiobe, занимая восьмое место. Но, как и любое великое изобретение, Golang вызывает как восхищение, так и критику. Некоторые особенности языка становятся поводом для любви, в то время как другие разработчики их ненавидят.
8 причин, почему разработчики любят и ненавидят Go
1. Go легко учить
Создатели Go специально сделали язык простым для изучения, отказавшись от многих сложных функций и идей. Они стремились к минимализму, сосредоточившись на том, что действительно нужно для выполнения задач в Google.
Плюсы: Простой язык легче осваивать новым программистам и членам команды. Меньше конструкций для изучения означает, что опытные программисты могут выучить язык за день. Проекты можно быстрее набирать, так как старых специалистов можно быстро обучить новому языку. Код часто легче читать из-за отсутствия странных или архаичных структур.
Минусы: Простота не всегда хороша — это всего лишь отсутствие определённых функций. Некоторые программисты чувствуют, что программирование на Go похоже на работу с одной рукой за спиной. Языку не хватает всех хитростей и фишек, которые предлагают другие языки, и это высокая цена.
2. Go не выделяет фаворитов
Go создан как компактный язык, который делает то, что нужно, но избегает лишних функций и украшений.
Плюсы: Многие разработчики хвалят простоту Go. Он не требует изучения или поддержания знаний десятков функций, чтобы быть эффективным. Читая код, программисты не сталкиваются с незнакомыми конструкциями.
Минусы: У каждого есть любимые фишки и трюки, но вероятность того, что Go их предложит, невелика. Разработчики иногда жалуются, что они могли бы выполнить то же самое в COBOL или Java одной строкой кода.
3. Синтаксис на основе C
Создатели Go имеют глубокие корни в мире Unix, и это видно. Синтаксис знаком любому, кто использовал C или языки, заимствовавшие у C, такие как Java или C#. Кудрявые скобки и типизация будут знакомы этой аудитории.
Плюсы: Программисты, выросшие на стиле C, интуитивно понимают Go. Они могут быстро освоить синтаксис и потратить время на изучение способов, которыми Go улучшил некоторые раздражающие аспекты C или Java.
Минусы: Python был разработан как антитеза C. В нём нет фигурных скобок для обозначения блоков кода, а типизация намеренно динамическая. Любители подхода Python найдут много причин не любить Go, считая его шагом назад.
4. Слишком много правил
Создатели Go не только определили синтаксис, но и многое из стиля и шаблонов использования языка. Они выпустили стандартную библиотеку форматирования, чтобы избежать споров о правильном способе отступов в коде Go. Они составили списки идиом и поощряют программистов использовать их. Также они запретили некоторые практики, которые лишь порицаются в других языках, например, неиспользуемые переменные или циклические зависимости.
Плюсы: Строго идиоматические правила Go упрощают понимание кода. Команды будут меньше спорить о стиле, так как существует меньше вариантов и причин разрабатывать собственный стиль.
Минусы: Эти дополнительные правила и соглашения кажутся ограничивающими. Почему неиспользуемая переменная — это проблема? Если компилятор может её обнаружить, он может её удалить без необходимости вмешательства программиста.
5. Дополнительная обработка ошибок
Много современных программ включает пути для обработки ошибок, когда они возникают. Go предлагает уникальный подход, поощряя программистов писать два пути в одной функции: нормальный и для ошибок. Программисты Go любят говорить, что "ошибки — это обычные значения", так как они являются частью того же кода.
Плюсы: Подход Go признаёт существование ошибок и поощряет программистов планировать их обработку. Это способствует созданию более устойчивого программного обеспечения.
Минусы: Необходимая обработка ошибок делает функции Go более громоздкими и сложными для понимания. Часто каждая функция в длинной цепочке должна включать подобный код для обработки ошибок, что может усложнить код.
6. Стандартная библиотека
Стандартная библиотека Go включает поддержку множества задач, общих для веб-ориентированного программирования микросервисов. От низкоуровневого управления сетевыми пакетами до обработки протокола HTTPS и декодирования JSON — всё это входит в стандартную библиотеку.
Плюсы: Когда многие стандартные функции обрабатываются библиотекой по умолчанию, код становится легче читать, так как никто не пишет свои версии или спорит о том, какая библиотека лучше.
Минусы: Конкуренция является индикатором спроса и инноваций. Наличие множества библиотек для одной задачи в других языках показывает глубокий интерес и богатую культуру.
7. Размер исполняемых файлов
Одна из целей команды Go — сделать развертывание программ на Go простым, объединяя всё в один исполняемый файл. Всё готово к запуску, так как все библиотеки Go включены в стандартную сборку.
Плюсы: Дисковое пространство дешёвое. Развертывание кода в странных местах может быть кошмаром, если установлены разные версии библиотек. Разработчики Go экономят время, создавая один исполняемый файл.
Минусы: Сколько копий библиотек Go у меня на диске? Если у меня 100 программ, это значит 100 копий. В какой-то момент эффективность становится важной. Да, дисковое пространство дешевле, но пропускная способность памяти и кэширование остаются важными для скорости выполнения.
8. Большой брат Google
Golang был разработан в Google, и эта большая компания продолжает быть одним из его главных сторонников, поставляя компилятор и большую часть инструментов. Есть некоторая поддержка и за пределами Google, например, GopherJS, который преобразует Go в JavaScript. Но в основном, большая часть усилий по разработке Go исходит изнутри Google.
Плюсы: Большая часть работы сегодня включает написание кода для систем серверов и клиентов, что составляет значительную часть нагрузки Google. Если Go подходит Google, он также подходит тем, кто работает аналогично. Если инженеры Google создали что-то, что им нравится, то и всем, кто выполняет похожие проекты, это тоже понравится.
Минусы: Дело не в том, что люди не любят Google, просто программисты не доверяют централизованным властям. Проблемы, как зависимость от поставщика и отсутствие контроля, являются серьёзными для тех, кто курирует технологический стек. Все щедроты Google всё равно заставляют программистов быть настороже, особенно когда другие языки имеют большие сообщества с открытым исходным кодом.
Заключение
Golang — это язык, который вызывает смешанные чувства. Он прост и мощен, но в то же время ограничен в возможностях. Golang привлекает за свою минималистичную философию, но вызывает недовольство из-за отсутствия некоторых привычных функций. Каждый программист находит в Go что-то своё, и этот язык продолжает находить новых поклонников, несмотря на критику. Как говорится, "на вкус и цвет товарища нет". Поэтому Go останется важным игроком на поле современных языков программирования ещё на долгое время.