- Основы: Работа с числами, форматирование строк, переменные и константы
- Содержание статьи
- Математические вычисления в Go
- Форматированный вывод Golang — Print, Println, Printf
- Константы и переменные в Go
- Golang: Go in Practice – заметки на полях, часть 1 – введение
- Объявление переменных
- Вывод типа переменной
- Go: Переменные
- Задание
- Переменные
- Как назвать переменную
- Область видимости
- Константы
- Определение нескольких переменных
- Пример программы
- Задачи
Основы: Работа с числами, форматирование строк, переменные и константы
Большинство компьютерных программ представляет собой серию шагов, что можно сравнить с кулинарным рецептом. Если дать компьютеру четкие указания, он сможет выполнить даже самые сложные задачи. Написание инструкций подобного рода называют императивным программированием.
Содержание статьи
Конечно, компьютеры способны на многое. Но зачем писать целую программу, если можно использовать простой калькулятор? В реальной жизни вам нет нужды запоминать скорость света или время вращения Марса вокруг Солнца. Сохраненный код программы можно прочитать позже. Таким образом, он будет одновременно калькулятором и справочником. Программа является исполняемым документом, который может быть передан и изменен.
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
Далее мы рассмотрим основы 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 символа. Положительные числа добавляют отступы слева, а отрицательные справа:
Результат вывода будет следующим:
Вопросы для проверки:
- Что нужно сделать, чтобы при выводе определенный текст был перенесен на новую строку?
- Что делает Printf при добавлении специального символа %v ?
- При необходимости отображения текста на новой строке используется \n или fmt.Println() .
- Вместо %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 .
Вопросы для проверки:
- Межпланетной Транспортной Системе SpaceX явно не хватает варп-двигателя, но он может добраться до Марса на скорости 100 800 км/ч. Поездка запланирована на Январь 2025 года. Расстояние между Марсом и Землей в это время будет равно 96 300 000 км. За сколько дней астронавты долетят до Марса?
- Продолжительность земных суток равна 24 часам. При написании программы дайте данным 24 часам понятное название, какое ключевое слово вы используете?
Источник
Golang: Go in Practice – заметки на полях, часть 1 – введение
Ещё весной начал учить Go, но потом перешёл на новую работу, забот и без того хватало, и Go забросил.
Тем не менее – встречается он сейчас много где (Docker, Prometheus, Terraform etc), а потому знать его желательно.
Да и вообще – иногда надо поучить что-то новое, ибо становится скучно.
Попробую вести “конспекты” книги Go in Practice авторов Matt Butcher, Matt Farina – на мой взгляд одна из самых толковых книг по Go (при условии, что это не первый ваш язык программирования, конечно). Не факт, что писать буду много и долго, так как сам Go мне совсем не нравится, но графомании ради – пусть будет.
Тут будет именно конспектирование, так что чтение самой книги категорически рекомендуется.
Кроме этой книги – ещё можно обратить внимание на The Go Programming Language, авторов Alan A. A. Donovan и Brian W. Kernighan (того самого, который соавтор книги C Programming Language).
Также есть серия переводов Go с нуля, не закончена – но базовые вещи рассмотрены. Остальные можно почитать в оригинале.
Ещёможно пройти быстрый туториал на tour.golang.org.
Объявление переменных
Вспомним объявление переменных в Go.
Можно использовать полное объявление:
В случае, если переменной сразу присваивается значение – можно опустить указание типа, тогда Go сам определит её тип:
Объявление переменной с помощью var тоже можно пропустить, и использовать объявление переменной с помощью “ : ” и оператора “ = “:
Вывод типа переменной
Примеры того, как можно отобразить типа переменных в Golang.
Первый способ – с помощью модификатора %T в Printf() :
Источник
Go: Переменные
Переменные — это именованные значения. Они хранятся в памяти во время выполнения программы.
Существует два способа объявить переменную в Go. Длинная запись с ключевым словом var :
И короткая запись:
Понимание, где лучше использовать короткую, а где – длинную инициализацию нарабатывается практикой. Пока же советуем придерживаться двух правил:
— Использовать короткую запись как можно чаще
— Если где-то необходимо написать через var (например, инициализировать несколько переменных за раз), то все переменные объявляются одинаково.
Значение переменной можно изменять в любой момент:
Однако из-за строгой типизации мы не можем записать в переменную значение другого типа данных:
Переменные принято называть в camelCase:
Если не задавать значение переменной при инициализации, она будет иметь «нулевое» значение:
Объявлять переменные можно на уровне функций и пакетов. Переменные на уровне пакета инициализируются при старте программы. Они используются не часто. Например, чтобы не тратить память и процессор на создание новой переменной, мы можем один раз описать статичные ошибки и использовать их в функциях пакета:
Стоит сказать пару слов об особенности именования переменных. Из-за стремления к простоте, переменные называются в максимально сокращенном виде, достаточном для понимания. Например:
Задание
Объявите две переменные firstName и lastName . Переменная firstName должна содержать строку «John», переменная lastName — «Smith».
Соедините эти переменные в одну: fullName , чтобы получилась строка «John Smith».
Выведите значение переменной fullName при помощи функции Print из пакета fmt
Источник
Переменные
Ранее в этой книге мы имели дело с литеральными значениями (числами, строками и т.д.), но программы с одними только литералами фактически бесполезны. Для того, чтобы сделать по-настоящему полезные программы, нам нужно узнать о двух важных вещах: переменных и инструкциях, управляющих ходом выполнения. В этой главе будут рассмотрены переменные.
Переменная — это именованное место хранения какого-то типа данных. Давайте изменим программу, которую мы написали в главе 2 так, чтобы там использовались переменные.
Обратите внимание, что мы по-прежнему используем строковый литерал из оригинальной программы, но вместо того, чтобы напрямую передать его в функцию Println , мы присваиваем его переменной. Переменные в Go создаются с помощью ключевого слова var , за которым следуют имя переменной ( x ), тип ( string ) и присваиваемое значение ( Hello World ). Последний шаг не обязателен, поэтому программа может быть переписана так:
Переменные в Go похожи на переменные в алгебре, но есть несколько различий. Во-первых, когда мы видим символ = , то по привычке читаем его как «х равен строке Hello World». Нет ничего неверного в том, чтобы читать программу таким образом, но лучше читать это как «х принимает значение строки Hello World» или «x присваивается строка Hello World». Это различие важно потому, что переменные могут менять свои значения во время выполнения программы (как понятно по их названию). Попробуйте сделать следующее:
На самом деле вы можете сделать даже так:
Эта программа будет бессмысленной, если вы будете читать её как теорему из алгебры. Но она обретет смысл, если вы будете внимательно читать программу как список команд. Когда мы видим x = x + «second» , то должны читать это так: «Присвоить конкатенацию значения переменной x и литерала строки переменной x». Операции справа от = выполняются первыми, и результат присваивается левой части.
Запись x = x + y настолько часто встречается в программировании, что в Go есть специальный оператор присваивания += . Мы можем записать x = x + «second» как x += «second» , и результат будет тем же (прочие операторы могут быть использованы подобным же образом).
Другое отличие между Go и алгеброй в том, что для равенства используется другой символ: == (два знака равно, один за другим). == — это оператор. Как и + , он возвращает логический тип. Например:
Эта программа напечатает false , потому что hello отличается от world . С другой стороны:
напечатает true , потому что обе строки одинаковы.
Если мы хотим присвоить значение переменной при её создании, то можем использовать сокращенную запись:
Обратите внимание на то, что : стоит перед = , и на отсутствие типа. Тип в данном случае указывать не обязательно, так как компилятор Go способен определить тип по литералу, которым мы инициализируем переменную. Тут мы присваиваем строку, поэтому x будет иметь тип string . Компилятор может определить тип и при использовании var :
И так со всеми типами:
В общем, желательно всегда использовать краткий вариант написания.
Как назвать переменную
Правильное именование переменных — важная часть разработки ПО. Имена должны начинаться с буквы и могут содержать буквы, цифры и знак _ (знак подчеркивания). Компилятору Go, в принципе, всё равно, как вы назовете переменную, но не забудьте, что вам (и может быть кому-то еще) потом это придется читать. Предположим, у нас есть:
В этом случае x не самое лучшее имя переменной. Лучше было бы так:
В последнем случае мы использовали специальный способ написания имени переменной, состоящей из нескольких слов, известный как lower CamelCase (или camelBack). Первая буква первого слова записывается в нижнем регистре, первая буква последующих слов записывается в верхнем регистре, всё остальное — в нижнем.
Область видимости
Вернемся к программе, которую мы рассматривали в начале главы:
Эту программу можно записать следующим образом:
Мы вынесли переменные за пределы функции main. Это означает, что теперь другие функции имеют доступ к этой переменной:
Функция f имеет доступ к переменной x . Теперь предположим, что вместо этого мы написали:
Если вы попробуете выполнить эту программу, то получите ошибку:
Компилятор говорит вам, что переменная x внутри функции f не существует. Она существует только внутри функции main . Места, где может использоваться переменная x , называются областью видимости переменной. Согласно спецификации «в Go область видимости ограничена блоками». В основном это значит, что переменные существуют только внутри текущих фигурных скобок < >(в блоке), включая все вложенные скобки (блоки). Область видимости поначалу может запутать вас, но когда вы увидите больше примеров, то всё станет ясно.
Константы
Go также поддерживает константы. Константы — это переменные, чьи значения не могут быть изменены после инициализации. Они создаются таким же образом, как и переменные, только вместо var используется ключевое слово const :
вызовет ошибку компиляции:
Константы — хороший способ использовать определенные значения в программе без необходимости писать их каждый раз. Например, константа Pi из пакета math .
Определение нескольких переменных
В Go существует еще одно сокращение на случай, если необходимо определить несколько переменных:
Используя ключевые слово var (или const ), за которым идут круглые скобки с одной переменной в каждой строке.
Пример программы
Тут мы используем другую функцию из пакета fmt , чтобы считать пользовательский ввод ( Scanf ). &input будет объяснен в следующих главах, а все, что нам нужно знать сейчас, это то, что Scanf заполняет переменную input числом, введенным нами.
Задачи
Существуют два способа для создания новой переменной. Какие?
Какое будет значение у x после выполнения x := 5; x += 1 ?
Что такое область видимости и как определяется область видимости переменной в Go?
В чем отличие var от const ?
Используя пример программы выше напишите программу, переводящую температуру из градусов Фаренгейта в градусы Цельсия. ( C = (F — 32) * 5/9 )
Напишите другую программу для перевода футов в метры (1 фут = 0.3048 метр).
Источник