В последнее время я играл с новым языком программирования Google Go
и задавался вопросом, почему у оператора присваивания :=
стоит двоеточие перед знаком равенства. =
Есть ли особая причина, по которой авторы языка хотели использовать name := "John"
вместоname = "John"
Ответы:
:=
Обозначение служит и в качестве декларации и как инициализация.foo := "bar"
эквивалентно
var foo = "bar"
foo = "bar"
Вы можете спросить, почему бы не использовать только подобные на любом языке сценариев? Что ж, чтобы не было опечаток.foo = "bar" fooo = "baz" + foo + "baz" // Oops, is fooo a new variable or did I mean 'foo' ?
источник
name := "John"
просто синтаксический сахар для
var name string name = "John"
Go статически типизирован, поэтому вам нужно объявить переменные.
источник
name := "John"
это сокращение дляvar name = "John"
.var name = "John"
это сокращениеvar name string = "John"
от двух указанных строк."var" IdentifierList = ExpressionList .
».:=
не является оператором присваивания. Это короткое объявление переменной.=
- оператор присваивания.В Go
name := "John"
это сокращение отvar name = "John"
.источник
Роб Пайк объясняет, почему Го говорит,
:=
во время своего выступления «Истоки го» (2010).:=
был псевдооператором на другом языке, подписанным Пайком и названным Newsquek (1989). Который имел нотацию в стиле Паскаля и способность определять тип для объявления и инициализации идиомы ( стр. 15 )// variable: [type] = value x: int = 1 x := 1
Примечание на полях : Роберт Гриземер вызывает
:=
оператора, отвечая на вопрос: «Что бы вы взяли из Go?» во время QA-сессии на Google I / O 2013. Называть это удобным, но проблематичным .источник
Оба являются разными методами объявления переменных в языке Go.
var name = "John" // is a variable declaration
И
name := "John" // is a short variable declaration.
Краткое объявление переменной - это сокращение для объявления обычной переменной с выражениями инициализатора, но без типов.
Подробнее читайте ниже:
Объявления переменных
Краткие объявления переменных
источник
Есть по крайней мере одно тонкое различие между
name := "John"
и
var name = "John"
Первый является оператором без объявления и не допускается за пределами тела функции, тогда как последний является допустимым оператором на уровне пакета.
источник
Важный контекст для ответа:
:=
- сокращенный оператор для инициализации переменной. В Go следующие операции эквивалентны:var myNumb String = "one" myNumb := "one"
Ответ:
Подразумевается вопрос: «Почему мы разработали сокращенную запись так,
:=
чтобы она была:
перед=
?». Причина в том, чтобы предотвратить распространенные опечатки. Если бы сокращенный оператор присваивания был справедливым=
, у вас могла бы быть следующая ситуация:var myNumb String = "one" myNumb = "two"
Собирался ли пользователь, создавший этот код, переназначить
two
егоmyNumb
, или он набрал опечаткуmyNumb
вместо того, чтобы правильно набратьmyNumbTwo
? Включив двоеточие:=
, программист должен был бы совершить две ошибки (забыть двоеточие и забытьvar
), чтобы получить ошибку, что резко снизит вероятность этого .источник