Для начала давайте разберемся с некоторыми основными концепциями, применимыми к Go.

1. Что такое переменные?

Спецификация языка Go определяет переменную как место хранения для хранения значения, и значение, которое она может содержать, зависит от type переменной.

2. Что такое тип?

Тип определяет набор значений вместе с операциями и методами, специфичными для этих значений. В Go поддерживаются разные типы типов, они могут быть предопределены, например int, float64, bool, string, или определяться пользователем с помощью struct, или составных типов, таких как array, map, slice, and channel, которые состоят из других типов - встроенных или определяемых пользователем.

3. Как вы создаете переменные?

Обычное объявление: 'var variable_name type', что это значит? var - ключевое слово, используемое для объявления переменной. variable_name - это имя, которое может принимать любое значение (только буквенно-цифровое, за исключением `_` и не может начинаться с цифры), как правило, оно определяет назначение переменной. type определяет, какой тип данных может принимать переменная.

Кроме того, переменная может быть объявлена ​​с инициализатором, и в этом случае тип можно не указывать, т.е. var variable_name = 1, Go понимает тип по типу инициализатора.

Краткое объявление с :=: внутри тела функции можно объявить переменную со знаком :=, some_var := “I’m a string variable”

Примечание. За пределами тела функции каждый оператор должен начинаться с ключевого слова, поэтому конструкция := недоступна.

Теперь переходим к повторному объявлению и повторному назначению.

Рассмотрим случай,

Выход будет,

1 hi
2 hello

Обратите внимание, что var_2 появляется в обоих операторах, это дублирование совершенно законно в Go. В первом операторе переменная объявлена ​​, тогда как во втором операторе она только повторно назначается.

Это просто…? нет, на это есть ограничения,

  1. Второе объявление должно находиться в той же области, что и существующее объявление (если переменная уже объявлена ​​во внешней области, объявление создаст новую переменную)

Давайте посмотрим на это на примере,

Результатом этого будет,

1 hi
2 hello
3 hey
hello

Теперь, что здесь происходит, второй оператор повторно присваивает переменной новое значение, потому что она находится в той же области видимости, что и предыдущее объявление. Но, если учесть условие if, создается новая переменная var_2, которая ограничена только областью действия условия if, поэтому значение переменной hello до и после условия if.
Раскомментирование последнего строка должна выдать ошибку компиляции, поскольку var_4 доступен только в условии if.

Error: undefined: var_4

2. Соответствующее значение в новой инициализации должно быть присвоено переменной.

Первый оператор объявляется впервые, второй оператор повторно присваивает ему новое значение, тогда как третий оператор пытается присвоить другой тип переменной (в данном случае присвоение значения с плавающей запятой строке ). Значит, это приведет к ошибке компиляции.

Error: cannot use 3.14 (type float64) as type string in assignment

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

Поскольку во втором операторе нет новой переменной, это приводит к ошибке компиляции.

Error: no new variables on left side of :=

Примечание. Что это за _?
Это пустой идентификатор, который может быть назначен или объявлен с любым значением любого типа, при этом значение отбрасывается безвредно.

Хотите знать, почему такое поведение? это скорее практический, чем теоретический призыв, упрощающий использование одной переменной, он приобретает больше смысла, когда мы начинаем использовать Go.

Ссылки: Все взято из официальной документации Go.

  1. Https://golang.org/ref/spec
  2. Https://golang.org/doc/effective_go.html
  3. Https://tour.golang.org/list

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