Оператор присваивания в языке Go

В последнее время я играл с новым языком программирования google Go

и задавался вопросом, почему оператор присваивания := имеет двоеточие перед знаком равенства = Есть ли особая причина, по которой авторы языка хотели использовать name := "John" вместо name = "John"

Ответ 1

Обозначение := служит как объявление, так и инициализация.

foo := "bar"

эквивалентно

var foo = "bar"

Почему бы не использовать только foo = "bar", как на любом языке сценариев, вы можете спросить? Ну, чтобы избежать опечаток.

foo = "bar"
fooo = "baz" + foo + "baz"   // Oops, is fooo a new variable or did I mean 'foo' ?

Ответ 2

name := "John"

- это просто синтаксический сахар для

var name string
name = "John"

Go статически типизирован, поэтому вам нужно объявить переменные.

Ответ 3

:= не является оператором присваивания. Это краткое объявление переменной. = - оператор присваивания.

Объявления коротких переменных

Объявление короткой переменной использует синтаксис:

ShortVarDecl = IdentifierList ":=" ExpressionList .

Это сокращение для регулярного объявления переменной с инициализатором выражения, но не типы:

"var" IdentifierList = ExpressionList .

Assignments

Assignment = ExpressionList assign_op ExpressionList .

assign_op = [ add_op | mul_op ] "=" .

В Go, name := "John" является сокращением для var name = "John".

Ответ 4

Rob Pike объясняет, почему Go имеет := во время своего выступления "Origins of Go" (2010).

:= был псевдооператором в другом языке, обозначенном Пайком под названием Newsquek (1989). Который имел обозначение Pascal-ish и способность выводить тип для объявления и инициализации идиомы (стр. 15)

// variable: [type] = value
x: int = 1
x := 1

Маргинальное примечание: Robert Griesemer вызывает := оператор, отвечая на вопрос "Что вы могли бы извлечь из Go?" во время сеанса QA в Google I/O 2013. Ссылаясь на это как удобное, но проблематичное.

Ответ 5

Оба являются различными методами объявления переменных в языке Go.

var name = "John" // is a variable declaration 

И

name := "John"   // is a short variable declaration. 

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

Подробнее читайте ниже:

Объявления переменных

Объявления коротких переменных

Ответ 6

Важный контекст для ответа:

:= - сокращенный оператор для инициализации переменной. В Go следующие операции эквивалентны:

var myNumb String = "one"
myNumb := "one"

Ответ:

Теперь подразумевается вопрос: "Почему дизайн <сокращенно > := должен был иметь : до =?". Причина заключается в предотвращении распространенных опечаток. Если оператор сокращенного присваивания был просто =, тогда у вас могла бы быть следующая ситуация:

var myNumb String = "one"
myNumb = "two"

Теперь пользователь, создавший этот код, переназначил two на myNumb, или он ошибся myNumb вместо правильной ввода myNumbTwo? Включив двоеточие в :=, программисту пришлось бы совершить две ошибки (забыть двоеточие и забыть var), чтобы иметь ошибку, следовательно, уменьшая вероятность сделать это решительно.