Переменные в Go

User Rating: 0 / 5

Всем привет! В сегодняшней статье мы посмотрим на то, как объявляются переменные в языке Go.

Для совсем начинающих разработчиков я вкратце объясню, что вообще такое переменная. По сути, переменную можно представить себе в виде "ящика" или некоторой "коробки", в которую можно что-то поместить. В мире программирования в переменные обычно помещаются какие-то значения, например такие: "тестовая строка", 145.743 или 1500 - это всё разные значения. У всех переменных есть соответствующий им тип данных. Это как бы означает, что в каждый "ящик" или "коробку" можно положить только значения определённых типов данных, но нельзя положить значения никаких других типов данных. Вот какие типы данных у наших рассмотренных выше значений:

  • "тестовая строка" - это значение строкового типа (string)
  • 145.743 - это значение типа для хранения дробных чисел (float64)
  • 1500 - это значение типа для хранения целых чисел (int)

Продолжим нашу аналогию с "ящиками" или "коробками". Помимо того, что в коробки можно помещать только значения определённых типов, как же различать "коробки" между собой, если их много? Давайте представим, что на "коробку" можно наклеить "табличку" с надписью, чтобы уникально отличать её от всех остальных коробок. В программировании эта "табличка" называется именем переменной.

Теперь давайте перейдем к примерам, как в языке Go определяются переменные.

Рассмотрим следующий код:

var s = "some value"
fmt.Println("s =", s)

Здесь s - это имя переменной, и в неё мы помещаем значение "some value". Поскольку слева и справа здесь стоят кавычки, то это точно значение строкового типа (string). Значит, приходим к выводу, что переменная s хранит значения строкового типа данных (и никакие другие).

С помощью fmt.Println("s = ", s) мы выводим на экран значение переменной s (или в нашей аналогии с коробками и табличками - выводим "содержимое коробки с табличкой s"). 

Обратите внимание, что здесь мы также использовали ключевое слово языка Go - var, которое используется для обозначения того, что s - это переменная, а не что-то другое. В английском языке переменная звучит как variable, отсюда и сокращённое var.

Также обратите внимание, что язык Go способен автоматически "понять", что тип значений для переменной s - это значения строкового типа. Это довольно несложно сделать, поскольку слева и справа от some value стоят кавычки, следовательно, это строка.

Но в Go можно задать тип данных для переменной и явно, сразу после имени переменной, но перед присваиванием ей значения. Например, так в языке Go мы говорим, что у переменной s0 тип данных - строковый (string), присваиваем ей значение "s0 value", а затем выводим его на экран консоли:

var s0 string = "s0 value"
fmt.Println("s0 =", s0)

Давайте теперь посмотрим, как объявляются переменные других типов данных.

Следующим кодом мы задаём две переменные f1 и f2 с типом данных для хранения дробных чисел (float64):

var f1 = 1.5
fmt.Println("f1 =", f1)

var f2 float64 = 456.7
fmt.Println("f2 =", f2)

Точно так же, как и со строками - можно сразу указывать нужное значение без явного указания типа, язык Go поймет, что переменная f1 теперь будет содержать дробное число. Но можете и указать явно тип float64, как это сделано для переменной f2.

Язык Go также поддерживает переменные логического, или булева типа (bool), которые могут содержать только два значения - true ("истина") или false ("ложь").

Давайте посмотрим, как это сделать, зададим переменные b1 и b2 и выведем их значения на консоль:

var b1 = true
fmt.Println("b1 =", b1)

var b2 bool = false
fmt.Println("b2 =", b2)

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

Давайте теперь посмотрим, как выглядит вывод на консоль неинициализированных переменных:

var def_b bool
var def_f float64
var def_i int64
var def_s string
fmt.Println("def_b =", def_b)
fmt.Println("def_f =", def_f)
fmt.Println("def_i =", def_i)
fmt.Println("def_s =", def_s)

Здесь мы объявили 4 переменные разных типов и вывели их значения по умолчанию на консоль. Если будет выполнен данный код, он выведет на экран консоли следующее:

def_b = false
def_f = 0
def_i = 0
def_s =

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

  • переменные булева типа (bool) - значение false
  • переменные дробного типа (float64) и целого типа (int) - значение 0
  • переменные строкового типа (string) - пустая строка "" (никаких кавычек не видно при выводе на консоль, лишь пустота - т.к. кавычки используются только при написании самой программы в Go для задания пустой строки)

Также в языке Go есть оператор присваивания значения :=

Он удобен, если вы не хотите писать var перед именем переменной, но хотите сразу присвоить переменной какое-то значение (инициализировать переменную):

s1 := "a b c"
fmt.Println("s1 =", s1)

s2, s3 := "2", "3"
fmt.Println("s2 =", s2)
fmt.Println("s3 =", s3)

var s4, s5 string = "4", "5"
fmt.Println("s4 =", s4)
fmt.Println("s5 =", s5)

Обратите внимание на ещё одну интересную особенность языка Go - он позволяет присвоить значения сразу нескольким переменным. Именно так мы сделали в коде выше для строковых переменных s2 и s3.

Но вы также можете присвоить одновременно значения нескольким переменным и с помощью ключевого слова var, как это сделано для переменных s4 и s5. Всё это справедливо и для любых других стандартных типов данных в языке Go, а не только для строк.

Напоследок скажу, что в Go поддерживаются и другие интересные типы данных, например rune, а также разновидности для целочисленных и дробных типов данных. К примеру, помимо float64 есть также и float32, а для хранения целых чисел предусмотрено аж 8 типов! Вот они - uint8, uint16, unit32, uint64, int8, int16, int32, int64. Такое многообразие позволяет программисту на языке Go точно специфицировать сколько байт (т.е. "ячеек памяти", в аналогии с нашими "коробками" байт - некий аналог размера коробки, который определит, насколько большое значение в неё "влезет") будет отведено под хранение переменной, что может в определённых ситуациях сэкономить занимаемую переменными память при работе вашей Go программы.

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

На этом всё, внизу можете найти ссылку на пример и инструкцию по запуску всех примеров на Go для нашего сайта. Спасибо за внимание и удачи!

Яндекс.Метрика