Golang основы

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

Содержание статьи

Конечно, компьютеры способны на многое. Но зачем писать целую программу, если можно использовать простой калькулятор? В реальной жизни вам нет нужды запоминать скорость света или время вращения Марса вокруг Солнца. Сохраненный код программы можно прочитать позже. Таким образом, он будет одновременно калькулятором и справочником. Программа является исполняемым документом, который может быть передан и изменен.

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

Далее мы рассмотрим основы Go, изучив его синтаксис на примере создания простого калькулятора. По завершении данного урока вы сможете:

  • Создать программу для математических операций;
  • Объявлять переменные и константы;
  • Разобраться, в чем отличие между объявлением (declaration) и присваиванием (assignment);
  • Использовать стандартную библиотеку для генерации псевдослучайных чисел.

Математические вычисления в Go

Многим порой хочется выглядеть моложе и весить чуть меньше. В данном контексте, Марсу есть что предложить. На полный оборот вокруг Солнца Марсу требуется 687 земных дней. Его гравитационная сила также ниже, следовательно, на Марсе все будет весить на 38% меньше, нежели на Земле.

Для вычисления того, насколько помоложе и легче станет человек на Марсе, напишем небольшую программу. В Golang есть те же арифметические операторы, что и в других популярных языках программирования: +, -, *, / и %, что используются для сложения, вычитания, умножения, деления и нахождения модуля соответственно.

На заметку: Оператор модуля % нужен для получения остатка от деления двух чисел. К примеру, для 42 % 10 результатом будет 2.

Обратите внимание, что выбранная единица измерения веса никак не влияет на сами вычисления. Вы можете рассчитывать вес в килограммах, фунтах и так далее. Вес на Марсе в любом случае будет на 37.83% меньше веса на Земле.

Результат:

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

В коде функция Print вызывается несколько раз для отображения предложения в одной строке. Также можно передать список аргументов, разделенных запятыми. Аргументом Println может быть текст, число или математическое выражение:

Можете поэкспериментировать на Go Playground, заменив вес и возраст, данные в программе, на свои собственные. После редактирования кода нажмите на кнопку Format. Отступы и интервалы в программе автоматически переформатируются без изменения того, что делает код.

Форматированный вывод Golang — Print, Println, Printf

У функций Print и Println есть брат, что дает больше контроля над выводом. Используя Printf, можно вставлять значение в любой части текста.

В отличие от Print и Println, первый аргумент Printf всегда является текстом. После текста следует специальный символ %v, что является заменой значения (сокращенно от value), рассчитанного во втором аргументе.

На заметку: Помимо %v в Go используются и другие специальные символы. С полным списком можно ознакомиться в официальной документации.

Функция Println автоматически перемещает текст на следующую строку, в то время как Printf и Print этого не делают. При желании переместить что-то на новую строку в тексте нужно добавить \n.

Если уточняется несколько специальных символов, функция Printf подставит значения в следующем порядке:

В дополнении подставным значениям в предложении Printf позволяет выравнивать текст. Уточнить ширину можно в специальном символе. К примеру, %4v добавит отступ размером в 4 символа. Положительные числа добавляют отступы слева, а отрицательные справа:

Результат вывода будет следующим:

Вопросы для проверки:

  1. Что нужно сделать, чтобы при выводе определенный текст был перенесен на новую строку?
  2. Что делает Printf при добавлении специального символа %v?

Константы и переменные в Go

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

Убедившись в преимуществах жизни на Марсе, можно приступить к расчету времени, что потребуется на путешествие. Скорость света была бы идеальной. Такие поездки осуществляются в вакууме на постоянной скорости, что упрощает вычисления. С другой стороны, расстояние от Земли до Марса может значительно отличаться в зависимости от того, в данный конкретный момент времени планеты находятся на солнечной орбите.

В следующей программе представлено два новых ключевых слова, const и var, что нужны для объявления констант и переменных соответственно:

Проверьте работоспособность кода на Go Playground, нажав для запуска кнопку Run. Скорость света и правда удобна. Никто не успеет спросить: «Когда мы будем на месте?»

Первое вычисление основывается на том, что Марс и Земля находятся рядом. Объявляется переменная distance, которой присваивается значение в 56,000,000 км. Затем переменной distance присваивается новое значение в 401,000,000 км, что является расстоянием между планетами в тот момент, когда они находятся на противоположных концах солнечной орбиты. Хотя, в реальной жизни пролететь сквозь Солнце вряд ли получится.

На заметку: Константу lightSpeed изменить нельзя. При попытке присвоить ей новое значение компилятор Go выдаст ошибку "cannot assign to lightSpeed".

Переменные должны быть объявлены перед их использованием. Golang выведет ошибку при попытке присвоить значение переменной, которая не была объявлена через var. К примеру, speed = 16. Это ограничение помогает избежать ошибок случайного присваивания значений не тем переменным. В таком случае сразу можно заметить опечатки вроде случайно введенного distence вместо distance.

Вопросы для проверки:

  1. Межпланетной Транспортной Системе SpaceX явно не хватает варп-двигателя, но он может добраться до Марса на скорости 100 800 км/ч. Поездка запланирована на Январь 2025 года. Расстояние между Марсом и Землей в это время будет равно 96 300 000 км. За сколько дней астронавты долетят до Марса?
  2. Продолжительность земных суток равна 24 часам. При написании программы дайте данным 24 часам понятное название, какое ключевое слово вы используете?

Объявление нескольких переменных сразу

Объявление переменной или константы в Go осуществляется следующим образом:

Переменные или константы также можно объявить группой:

Объявление нескольких переменных в одну строку:

Перед объявлением нескольких переменных как группы или в одну строку, посмотрите, связаны ли рассматриваемые переменные. И всегда помните, что код должен быть понятным и читабельным.

Вопрос для проверки:

Как одной строкой кода объявить количество часов в сутках и число минут в часе?

Операторы инкремента и присваивания Go

Есть несколько коротких способов присваивания с другими операциями. Последние две строки следующего кода равнозначны.

У оператора инкремента, или увеличения на один есть сокращенный вариант записи, как показано в следующем коде:

Уменьшить значение можно через count-- или сокращенные варианты других операторов вроде price /= 2 таким же образом.

На заметку: Go не поддерживает префикс инкремента ++count, как это делают С или Java.

Вопрос для проверки:

Напишите кратчайшую строку кода для вычитания двух фунтов из переменной под названием weight.

Генерация случайного числа в Go

Загадайте любое число между 1 и 10.

Готово? Окей.

Компьютер также можно «заставить» загадать любое число между 1 и 10. Для генерации псевдослучайного числа в Go используется пакет rand. Числа называются псевдослучайными, так как они более или менее случайные, но не совсем.

Следующая программа отображает два числа в диапазоне 1-10. При передаче 10 к Intn возвращается число в промежутке 0-9, куда добавляется 1 и результат присваивается к num. Переменная num не может быть константой Go, так как это результат вызова функции.

На заметку: При рассмотрении промежутка 1-10 обязательно нужно добавить единицу. В противном случае будет получено число в диапазоне 0-9. Это типичный пример ошибки неучтенной единицы, классической ошибки программирования.

Путем импорта пакета rand является math/rand. У функции Intn есть префикс rand (название пакета), хотя путь импорта длиннее.

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

Для использования пакета нужно, чтобы он значился в import. Go Playground добавляет пути импорта автоматически. Сначала нужно поставить галочку возле чекбокса Imports, а затем нажать на кнопку Format. Go Playground определит, какие пакеты используются, и обновит пути импорта.

Вопрос для проверки:

Расстояние между Землей и Марсом в разное время отличается и зависит от того, где планеты в данный конкретный момент времени находятся на орбите Солнца. Напишите программу для генерации случайного расстояния в промежутке от 56 000 000 до 401 000 000 км.

Заключение

  • Функции Print, Println и Printf выводят на экран текст и числа;
  • С помощью Printf и специального сокращения %v значения можно вставить в любом месте отображаемого текста;
  • Константа объявляется через ключевое слово const, ее изменить нельзя;
  • Переменная объявляется через ключевое слово var, ей можно присвоить новое значение во время работы программы;
  • Пути импорта math/rand отсылаются к пакету rand;
  • Функция Intn из пакета rand генерирует псевдослучайные числа;
  • В уроке были разобраны 5 из 25 ключевых слов Go: package, import, func, const и var.

Для проверки собственных сил выполните следующее задание.

Напишите программу, которая посчитает, как быстро должна передвигаться ракета (км/ч), чтобы добраться до Марса за 28 дней. Предположим, что расстояние от Земли до Марса равно 56 000 000 км.

Выполнив задание, можете сравнить свое решение с нашим вариантом.

Понравилась статья?

Поддержи наш проект, чтобы мы могли создать больше хорошего контента!