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


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

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

7 68

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) для того, чтобы иметь ошибку, следовательно, уменьшая вероятность этого резко.

есть по крайней мере одно тонкое различие между

name := "John"

и

var name = "John"

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