В настоящее время существует так много популярных языков программирования, которые используются для создания сервисов и систем, таких как Node.js, PHP и Python. И все они имеют свои преимущества и недостатки, поэтому все зависит от того, для чего программист будет использовать тот или иной язык программирования. Если вам нужно написать программу с очень эффективным параллелизмом, но при этом удобочитаемую, я познакомлю вас с этим языком, Go (он же Golang).
Цель этой статьи - показать вам, как написать программу на Go. Я объясню вам часто используемый синтаксис и покажу несколько советов и приемов, о которых вы могли не знать в Go. В любом случае, вы также можете найти официальное руководство по Go на https://tour.golang.org/ для получения более подробной информации, но если вы хотите быстро изучить и понять Go и получить некоторые трюки, эта статья - то, что вам нужно.
Прежде чем вы узнаете и поймете, почему Golang хорош в управлении параллелизмом, я думаю, что лучше начать с чего-нибудь базового, а именно с синтаксиса.
Прежде всего, если у вас нет компилятора Go в вашей системе, вам следует перейти на https://golang.org/dl/, чтобы загрузить подходящий установщик с вашей системой и установить в него, тогда вы сможете построить и запустить код Go.
Начальный поток
Go - это компилируемый язык наподобие C / C ++, поэтому он быстрее некоторых интерпретируемых языков, таких как Node.JS и Python. Предоставленный сценарий показывает, как запустить код без создания его двоичного файла (Golang создает двоичный файл для команды run, но двоичный файл скрыт), а также показывает, как построить и запустить свой двоичный файл.
Приведенный выше код представляет собой очень простую программу для отображения текста «Пока, астероид!» (поскольку астероид только что миновал нашу Землю 10 августа). У Golang есть концепция пакетов, которая позволяет программистам создавать свои пакеты и позволять другим пакетам импортировать их. Вы можете увидеть пакет в коде, это пакет main, который является корневым пакетом для каждой программы Go. А внутри основного пакета есть функция main, которая также является (второй) первой функцией, запускаемой после выполнения программы Go.
Почему я сказал «второй»? Потому что существует функция «init», которая фактически является первой функцией, которая должна выполняться перед выполнением функции «main».
Как видите, сообщение от функции инициализации отображается перед основным сообщением. Функция инициализации предназначена для инициализации данных для любых пакетов с функцией инициализации, а не только для основного пакета. Это означает, что если ваша программа вызывает пакет с функцией инициализации в пакете, функция инициализации будет выполнена сразу после импорта пакета.
Пакеты
Пакет - это место, где хранятся функции, и один пакет может содержать множество файлов, которым вы можете свободно называть их.
Одно из важных правил создания пакета: «в одной папке должен быть только один пакет».
Не беспокойтесь !, вы можете не понять код в примере, но я объясню вам об этом в следующих разделах.
Переменные
Go - это язык со статической типизацией. Это означает, что вы должны объявить тип переменной при объявлении переменной, и ее нельзя изменить. Этот момент также делает Golang быстрым, потому что компилятору не нужно определять тип переменной во время выполнения.
Объявление переменной
Есть три способа объявить переменную. Из приведенного выше примера первый - это объявление с ручным указанием типа переменной, второй и третий - это объявление без ручного указания типов, но вместо этого он использует оператор после знака равенства, определяющего тип. Для третьего требуется двоеточие (:) для объявления переменной. Без двоеточия компилятор выдаст ошибку, если вы не объявили переменную раньше.
Вы также можете объявить глобальную переменную, объявив переменную вне функции, чтобы все функции внутри пакета имели доступ к глобальной переменной. Кроме того, вы можете разрешить пакету доступ к глобальной переменной другого пакета, используя заглавные буквы первую букву глобальной переменной.
Типы переменных
В Go много типов переменных, но в приведенном выше коде я покажу вам только часто используемые типы переменных. Как и в других языках, Go имеет примитивные типы int, float, string и boolean.
В Go есть slice, что-то вроде vector в C ++ или list в Python, и вы можете добавить его элемент позади него. На самом деле Go имеет массив, который очень похож на slice, но фиксированной длины.
И последний тип переменной в примере кода - map (например, map в C ++ или dict в Python). Карта используется для сопоставления ключа и значения. И помните, что вам нужно использовать функцию «make» для присвоения переменной «map» перед ее использованием.
Следующий тип переменной - структура. Он позволяет программистам определять новый тип данных, который сам по себе содержит другие типы данных (называемые field) . Каждое поле можно экспортировать по тому же правилу, что и глобальная переменная, которая использует первую букву поля с заглавной буквы. Это означает, что из кода поля Имя и Возраст могут быть доступны другим пакетам, а isAdmin - нет. Поле может быть назначено tag (`json: name `) в качестве метаданных для некоторых библиотек, таких как библиотека JSON (https://golang.org/ pkg / encoding / json / ), который использует tag для сопоставления поля структуры Go и поля JSON.
Преобразование типов
Некоторые пары типов можно преобразовать путем прямого преобразования (int (1.23), float (3), uint32 (5)), но для некоторых требуется дополнительная библиотека для преобразования, например string-int, int-string, bool-string. , и струна-бул.
Нулевые значения
Если вы объявляете переменную без присвоения ей какого-либо значения, значение переменной будет установлено на нулевое значение ее типа. (Вам может быть любопытно, что такое * person и nil. Это указатель и его нулевое значение, для которого я создам отдельную статью , Думаю будет в следующей статье 😂).
Операторы потока управления
Условия
В Go есть операторы потока управления, как и в других языках: if, else, switch, case, но в Go есть только один оператор цикла, который называется «for». Потому что вы можете заменить инструкцию «while» на инструкцию «for», как в примере ниже.
Петля
Как видно из примера, вы можете использовать «for» для той же цели, что и «while» на других языках. Кроме того, вы можете выполнять итерацию по некоторой итерируемой переменной, такой как array, slice и map, используя «range» , он возвращает два значения: индекс / ключ и значение.
Отложить
Оператор defer - это специальный оператор в Go. Вы можете вызывать любые функции после оператора defer. Функции будут храниться в стеке, и они будут вызываться после возврата из функции вызывающей стороны. Как вы можете видеть в примере, существует обратный порядок вызовов функций.
Функции
Функциональные компоненты
Функция Go состоит из 4 частей.
- Имя: должно быть указано в camelCase / CamelCase.
- Аргументы: функция может принимать ноль или более аргументов. Для двух или более последовательных аргументов с одним и тем же типом вы можете определить тип на обратной стороне последнего аргумента (например, «строка» в примере).
- Типы возвращаемых данных: функция может возвращать ноль или более значений. Если возвращает более одного значения, вам нужно заключить их в круглые скобки.
- Тело: это логика функции.
Имя Возвращаемые значения
Вы также можете назвать результирующие значения функции. Таким образом, вам не нужно объявлять возвращаемые переменные и определять, что функция возвращает в операторе return. В этом случае вам нужно заключить круглые скобки в возвращаемые типы, хотя аргумент только один.
Экспортированные / неэкспортированные функции
Подобно переменным и другим идентификаторам, функции можно экспортировать и не экспортировать, используя первую букву их имени с заглавной буквы.
Анонимные функции
Вы можете объявить функцию внутри другой функции и выполнить ее сразу после объявления. Это называется анонимной функцией, которая может получить доступ к области своего родителя. В этом случае анонимная функция может получить доступ к переменной b, которая в области действия основной функции
Как вы можете видеть в приведенном выше примере, функцию можно присвоить переменной для повторного использования.
Пустые идентификаторы
Go очень строг к неиспользуемым переменным, вы не можете скомпилировать код с неиспользуемыми переменными. Некоторые функции возвращают несколько значений, а некоторые значения не используются. Итак, Go предоставляет «пустой идентификатор» для замены неиспользуемых переменных, после чего код может быть выполнен.
Следующие темы
Прочитав эту статью, вы найдете способ написать простую программу Go. Однако этого недостаточно, если вы хотите создать высокопроизводительный сервис или систему. Есть и другие темы о Go, которые вам следует знать и которые показаны в списке ниже, и я расскажу о них в следующих статьях.
- "Указатель"
- Метод и интерфейс
- Идти рутиной
Спасибо, что дочитали эту статью до конца, до встречи в следующей!