Останнім часом я грав з новою мовою програмування Google Go
і дивувався, чому оператор присвоєння :=
ставить двокрапку перед знаком рівності. =
Чи є особлива причина, чому автори мови хотіли використовувати name := "John"
замістьname = "John"
Останнім часом я грав з новою мовою програмування 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 .
".
:=
не є оператором присвоєння. Це коротке оголошення змінної. =
є оператором присвоєння.
Коротке оголошення змінної використовує синтаксис:
ShortVarDecl = IdentifierList ":=" ExpressionList .
Це скорочення для звичайного оголошення змінної з виразами ініціалізатора, але без типів:
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
У Go - name := "John"
це скорочення для var name = "John"
.
Роб Пайк пояснює, чому Го має :=
під час свого виступу "Origins of Go" (2010).
:=
був псевдооператором іншою мовою, кодом якого був підписаний Пайк, який називається Newsquek (1989). Який мав позначення Паскаля та здатність виводити тип для оголошення та ініціалізації ідіоми ( стор. 15 )
// variable: [type] = value
x: int = 1
x := 1
Примітка на маргіналі: Роберт upріземер виховує :=
оператора, відповідаючи на запитання "Що б ви взяли з Go?" під час сеансу контролю якості в Google I / O 2013. Посилаючись на це як на зручний, але проблематичний .
Обидва вони відрізняються технікою оголошення змінних у мові Go.
var name = "John" // is a variable declaration
І
name := "John" // is a short variable declaration.
Коротке оголошення змінної - це скорочення для звичайного оголошення змінної з виразами ініціалізатора, але без типів.
Детальніше читайте нижче:
Важливий контекст відповіді:
:=
- це скорочений оператор для ініціалізації змінної. У Go наступні операції еквівалентні:
var myNumb String = "one"
myNumb := "one"
Відповідь:
Зараз мається на увазі запитання: "Чому пішов розробляти стенографічний запис :=
до :
"=
?". Причиною є запобігання поширеним помилкам. Якби оператор скороченого присвоєння був справедливим =
, то у вас могла б бути така ситуація:
var myNumb String = "one"
myNumb = "two"
Тепер користувач, який створив цей код, мав намір перепризначити two
його myNumb
, або він помилково ввів myNumb
замість того, щоб правильно ввести myNumbTwo
? Включивши двокрапку :=
, програмісту доведеться допустити дві помилки (забути двокрапку і забути var
), щоб мати помилку, отже, зменшуючи ймовірність цього різко .