Как видно, разработчикам Go удалось придумать очень эффективную систему ограничений на основе языка, чтобы реализовать некоторые из его лучших характеристик и возможностей. Эта практика очень впечатляет тем, что, используя каждое отдельное ограничение, удается одновременно реализовать не одну, а сразу несколько основных функций.
«Многие новички в Go запрашивают функции из языков, которые они знают. Но эти функции не принадлежат Go — и язык исправлен. Добавление функций в Go не сделало бы его лучше, а только увеличило бы его. Это сделало бы Го менее интересным из-за меньшего отличия». — Роб Пайк, создатель Golang
«Цель проекта Go состояла в том, чтобы устранить медлительность и неуклюжесть разработки программного обеспечения в Google и тем самым сделать процесс более продуктивным и масштабируемым. Язык был разработан людьми и для людей, которые пишут, читают, отлаживают и поддерживают большие программные системы». — Роб Пайк, создатель Golang

Чтобы полностью понять природу Голанга, давайте погрузимся в контекст его создания. Поскольку в то время у Google были проблемы, которые он не мог решить с помощью существующих инструментов, Go родился с острой потребностью в изменениях:

В целом, я бы посоветовал всем разработчикам React узнать обо всех мощных функциях, которые может предложить веб-платформа. Часто они делают ваши компоненты более простыми, удобными в сопровождении и более надежными. Ваша команда (и ваши клиенты) будут вам благодарны! ❤️

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

В целом, я бы посоветовал всем разработчикам React узнать обо всех мощных функциях, которые может предложить веб-платформа. Часто они делают ваши компоненты более простыми, удобными в сопровождении и более надежными. Ваша команда (и ваши клиенты) будут вам благодарны! ❤️Отсутствие общих принципов объектно-ориентированного программирования, таких как наследование, классы и обычные интерфейсы, чтобы ответить на критику ООП, которая становилась все более и более частой с появлением функционально-ориентированных языков, хотя Go отчасти тоже является одним из них, будучи многопарадигмальный язык. Кроме того, это помогает в достижении ортогональности.

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

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

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

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

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

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

При этом Go был разработан с учетом набора конкретных проблем, которые необходимо было решить, и изначально обладал прочной базой лучших функций из таких благородных языков программирования, как C, Pascal, Modula и Oberon. Он также учитывал полезные характеристики языков — Python, C++, Java и т. д. — критику которых Go должен был устранить.

Отсутствие обработки исключений try-catch. Несмотря на то, что это очень спорно и критикуется, на самом деле это действительно идиоматический способ Golang справляться с ошибками, который на самом деле полезен во многих отношениях: избегание повторяющегося кода обработки ошибок, поддержание эффективности потока управления и быстрого выполнения, поддержание чистоты и читабельности кода и упрощение написания кода и отладки.

А как насчет функций, которым удалось стать частью Go?