Учебники

Go — переменные

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

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

Sr.No Тип и описание
1

байт

Обычно один октет (один байт). Это тип байта.

2

ИНТ

Наиболее натуральный размер целого числа для машины.

3

float32

Значение с плавающей запятой одинарной точности.

байт

Обычно один октет (один байт). Это тип байта.

ИНТ

Наиболее натуральный размер целого числа для машины.

float32

Значение с плавающей запятой одинарной точности.

Язык программирования Go также позволяет определять различные другие типы переменных, такие как перечисление, указатель, массив, структура и объединение, которые мы обсудим в последующих главах. В этой главе мы сосредоточимся только на основных типах переменных.

Определение переменной в Go

Определение переменной сообщает компилятору, где и сколько памяти нужно создать для переменной. Определение переменной определяет тип данных и содержит список из одной или нескольких переменных этого типа следующим образом:

var variable_list optional_data_type;

Здесь, option_data_type — это допустимый тип данных Go, включая byte, int, float32, complex64, логический или любой пользовательский объект и т. Д., А variable_list может состоять из одного или нескольких имен идентификаторов, разделенных запятыми. Некоторые действительные объявления показаны здесь —

var  i, j, k int;
var  c, ch byte;
var  f, salary float32;
d =  42;

Оператор «var i, j, k;» объявляет и определяет переменные i, j и k; который инструктирует компилятор создавать переменные с именами i, j и k типа int.

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

variable_name = value;

Например,

d = 3, f = 5;    // declaration of d and f. Here d and f are int 

Для определения без инициализатора: переменные со статической продолжительностью хранения неявно инициализируются значением nil (все байты имеют значение 0); начальное значение всех других переменных — нулевое значение их типа данных.

Объявление статического типа в Go

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

пример

Попробуйте следующий пример, где переменная была объявлена ​​с типом и инициализирована внутри основной функции —

Live Demo

package main

import "fmt"

func main() {
   var x float64
   x = 20.0
   fmt.Println(x)
   fmt.Printf("x is of type %T\n", x)
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

20
x is of type float64

Динамическое объявление типа / вывод типа в Go

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

пример

Попробуйте следующий пример, где переменные были объявлены без какого-либо типа. Обратите внимание, что в случае вывода типа мы инициализировали переменную y с помощью оператора: =, тогда как x инициализировали с помощью оператора =.

Live Demo

package main

import "fmt"

func main() {
   var x float64 = 20.0

   y := 42 
   fmt.Println(x)
   fmt.Println(y)
   fmt.Printf("x is of type %T\n", x)
   fmt.Printf("y is of type %T\n", y)	
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

20
42
x is of type float64
y is of type int

Объявление смешанной переменной в Go

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

пример

Live Demo

package main

import "fmt"

func main() {
   var a, b, c = 3, 4, "foo"  
	
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Printf("a is of type %T\n", a)
   fmt.Printf("b is of type %T\n", b)
   fmt.Printf("c is of type %T\n", c)
}

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

3
4
foo
a is of type int
b is of type int
c is of type string

Lvalues ​​и rvalues ​​в го

В Go есть два вида выражений:

  • lvalue — Выражения, которые ссылаются на ячейку памяти, называются выражением «lvalue». Lvalue может отображаться как левая или правая сторона задания.

  • rvalue — термин rvalue относится к значению данных, которое хранится по некоторому адресу в памяти. Значение r — это выражение, которому не может быть присвоено значение, что означает, что значение r может появляться с правой, но не с левой стороны присвоения.

lvalue — Выражения, которые ссылаются на ячейку памяти, называются выражением «lvalue». Lvalue может отображаться как левая или правая сторона задания.

rvalue — термин rvalue относится к значению данных, которое хранится по некоторому адресу в памяти. Значение r — это выражение, которому не может быть присвоено значение, что означает, что значение r может появляться с правой, но не с левой стороны присвоения.

Переменные являются lvalues ​​и могут отображаться в левой части назначения. Числовые литералы являются r-значениями, поэтому не могут быть назначены и не могут отображаться слева.

Следующее утверждение действительно:

x = 20.0

Следующее утверждение недопустимо. Это сгенерирует ошибку во время компиляции —