Оператор присваивания на языке Go
В последнее время я играл с новым языком программирования google перейти
и было интересно, почему оператор присваивания :=
есть двоеточие перед знаком равенства =
Есть ли особая причина, по которой авторы языка хотели использовать name := "John"
вместо name = "John"
7 ответов:
The
:=
нотация служит как объявление и инициализация.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 является статически типизированным, поэтому вам нужно объявить переменные.
:=
не является оператором присваивания. Это короткое объявление переменной.=
- Это оператор присваивания.короткие объявления переменных
краткое объявление переменной использует синтаксис:
ShortVarDecl = IdentifierList ":=" ExpressionList .
это сокращение для обычного объявления переменной с инициализатором выражения, но не типы:
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
В Go,
name := "John"
является сокращением дляvar name = "John"
.
Роб Пайк объясняется зачем идти есть
:=
во время своего выступления "истоки Go" (2010).
:=
был псевдо-оператором в кодах другого языка, разработанных пайком под названием Newsquek (1989). Который имел нотацию Pascal-ish и способность выводить тип для объявления и инициализации идиомы (Страница 15)// variable: [type] = value x: int = 1 x := 1
Примечание На полях: Robert Griesemer воспитывает
:=
оператор, отвечающий на вопрос "Что было бы одним вещь, которую вы берете из Go?"во время сессии QA в Google I/O 2013. Ссылаясь на него как удобно, но проблематично.
оба являются различными методами объявления переменных на языке Go.
var name = "John" // is a variable declaration
и
name := "John" // is a short variable declaration.
краткое объявление переменной является сокращением для обычного объявления переменной с выражениями инициализатора, но без типов.
Подробнее читайте ниже:
важный контекст для ответа:
:=
- Это сокращенный оператор для инициализации переменной. В перейти, следующие операции эквивалентны:var myNumb String = "one" myNumb := "one"
ответ:
подразумеваемый вопрос теперь: "почему пошел дизайн стенографической записи
:=
иметь:
до=
?". Причина в том, чтобы предотвратить распространенные опечатки. Если оператор назначения стенографии был просто=
, то вы могли бы иметь следующую ситуацию:var myNumb String = "one" myNumb = "two"
теперь пользователь, создавший этот код, намеревался переназначить
two
доmyNumb
, или он ошибсяmyNumb
вместо правильного вводаmyNumbTwo
? В том числе толстой кишки в:=
, программист должен был бы совершить две ошибки (забыть двоеточие и забытьvar
) для того, чтобы иметь ошибку, следовательно, уменьшая вероятность этого резко.