От программиста на Java и Javascript

GO - это язык программирования, созданный Google еще в конце 2000-х годов. Он статически типизирован, что означает, что у вас есть безопасность типов, такая как Typescript, он скомпилирован, как его родительский язык, C, и имеет все особенности современного языка, такие как безопасность памяти и сборка мусора. По сути, это современная версия C, быстрый язык с современным синтаксисом и встроенной поддержкой параллелизма.

Естественно, что при таком сочетании GO становится все более популярным со временем, особенно потому, что он действительно гибкий и используется везде, от сценариев до веб-разработки (есть даже сторонний транспилятор для разработки внешнего интерфейса).

Но что отличает GO помимо его C-подобной природы? Одно дело в том, что GO - это мультипарадигма, что увеличивает его фактор гибкости, но что это значит? Что ж, это означает, что вы можете использовать go с функциональной парадигмой, императивной парадигмой, объектно-ориентированной парадигмой и т. Д.

Итак, от парня, который работал с Java, очень сильно объектно-ориентированным языком, и JavaScript, использующим его функциональную сторону, вот 4 способа, которыми GO просто отличается.

Состав против наследования

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

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

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

Структуры против классов

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

Итак, у вас есть структура, эта структура может иметь много атрибутов, и вы можете прикреплять методы, которые могут вызывать любые экземпляры этой структуры. Методы также могут быть общедоступными или частными, а также атрибуты, использующие как UpperCamelCase для общедоступных, так и lowerCamelCase для частных лиц.

Три ключевых различия между структурами и классами GO заключаются в том, что первые не допускают наследования (в пользу композиции, как упоминалось ранее), у них нет встроенных конструкторов, как у классов, и что интерфейсы реализуются неявно, что означает, что вам не нужно укажите, что класс реализует интерфейс, если он реализует методы интерфейса, это означает, что он также реализует интерфейс.

Структуры данных

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

Итак, вам нужно будет использовать структуры данных, которые у вас есть для обработки ваших данных. Во-первых, у вас есть массивы и срезы, которые ведут себя очень похоже, с основным отличием в том, что массивы неизменяемы. Таким образом, они наиболее близки к кортежу, который есть в GO, они оба могут быть повторены, а срезы ведут себя так же, как обычные массивы JavaScript, но без встроенных функций и того факта, что они типизированы с самого начала.

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

Обработка ошибок

Итак, обработка ошибок в GO также сильно отличается, прежде всего потому, что в большинстве языков программирования GO отсутствует один ключевой компонент: оператор try-catch. Итак, GO не позволяет вам обернуть весь ваш код в одну попытку, чтобы облажаться сколько угодно (например, это рекомендуется в таких языках, как Python).

Таким образом, основная причина того, что в GO отсутствуют операторы try-catch, заключается как раз в том, что вы не должны заключать весь свой код в одно исключение и говорить «да, просто обрабатывайте все вместе». Если вы считаете, что определенная часть вашего кода является рискованной или подверженной ошибкам, вы должны обрабатывать эту часть индивидуально с ее единственными условиями и надлежащим ответом.

Таким образом, GO делает это, имея два ответа на свои функции, обычно стандарт говорит, что вы должны повторить ошибку вместе с вашим ответом, и где бы вы ни вызывали эту функцию, вы либо получите эту ошибку, либо подтвердите ее с помощью оператора if. или вы просто проигнорируете его, используя пустой идентификатор (_), чтобы двигаться дальше.

Заключение

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