У чому різниця між =і :=операторами, і які варіанти використання для них? Вони обидва здаються на завдання?
x := uint32(123)працює. Для більшості людей це повинно бути очевидним, але мені довелося подумати кілька хвилин ;-)
У чому різниця між =і :=операторами, і які варіанти використання для них? Вони обидва здаються на завдання?
x := uint32(123)працює. Для більшості людей це повинно бути очевидним, але мені довелося подумати кілька хвилин ;-)
Відповіді:
Тільки =оператор присвоєння.
:=є частиною синтаксису пропозиції коротких змінних оголошень .
👉 Однак є деякі правила. Дивіться цю іншу відповідь для отримання більш детальної інформації.
:=, зазначений тут як оператор golang.org/ref/spec#Operators_and_punctuation , тож я не впевнений, що згоден, що " :=насправді не оператор"
У програмі Go :=- призначено для оголошення + призначення, тоді =як призначене лише для призначення.
Наприклад, var foo int = 10 те саме, що foo := 10.
=відміну від :=? Чи варто завжди використовувати :=?
:=призначити змінну, яка вже була оголошена, якщо ви не призначите відразу кілька змінних, і принаймні одна з цих змінних є новою.
intне потрібно, var foo = 10так само , якfoo := 10
Як уже пояснили інші, :=це як для декларації, привласнення, так і для передекларації; і він автоматично відгадує ( виводить ) тип змінної.
Наприклад, foo := 32 це форма короткої руки:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ * Є деякі правила: * /
★ 1-е правило:
Ви не можете використовувати :=зfuncs . Це тому, що з будь-якого функціоналу оператор повинен починатися з ключового слова.
// no keywords below, illegal.
illegal := 42
// `var` keyword makes this statement legal.
var legal = 42
func foo() {
alsoLegal := 42
// reason: it's in a func scope.
}
★ 2-е правило:
Ви не можете їх використовувати двічі ( в тому ж обсязі ):
legal := 42
legal := 42 // <-- error
Тому що, :=вводячи "нову змінну" , отже, використання її двічі не переосмислює другу змінну, тому це незаконно.
★ 3-е правило:
Ви можете використовувати їх для декларацій та призначень з різними змінними:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ 4-е правило (передекларація):
Ви можете використовувати їх двічі у "багато змінних" оголошеннях, якщо одна із змінних нова :
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
Це законно, адже ви не декларуєте всі змінні, ви просто перепризначаєте нові значення існуючим змінним і одночасно декларуєте нові змінні. Це називається передекларацією .
★ 5 правило:
Ви можете використовувати коротку декларацію, щоб оголосити змінну в більш новій області, навіть якщо ця змінна вже була оголошена тим самим ім'ям:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Ось, foo := 42це законно, тому що, він заявляє fooв області some()функцій. foo = 314є законним, оскільки він просто присвоює нове значення foo.
★ 6 правило:
Ви можете оголосити те саме ім'я в блоках коротких висловлювань, як: if , for , switch :
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Тому що, fooв if foo := ..., належить лише до цього ifпункту, і це в іншому обсязі.
Отже, як загальне правило: якщо ви хочете легко оголосити змінну, яку ви можете використовувати
:=, або, якщо ви хочете лише перезаписати існуючу змінну, ви можете використовувати=.
Список літератури:
:= є короткою рукою для декларації.
a := 10
b := "gopher"
aбуде оголошено як intі ініціалізовано зі значенням, 10де як bбуде оголошено як рядок та ініціалізовано зі значеннямgopher .
Їх еквіваленти з використанням =будуть
var a = 10
var b = "gopher"
=є оператором присвоєння. Він використовується так само, як і в будь-якій іншій мові.
Ви можете опустити тип при оголошенні змінної та присутні ініціалізатор ( http://tour.golang.org/#11 ).
=тільки для порівняння і :=призначено для завдання ...
: = Означає оголосити і призначити, тоді як = означає просто призначити.
:= заявляє і призначає, = просто призначає
Це корисно, коли ви не хочете заповнювати свій код деклараціями типу або структури.
// Usage with =
var i int
var U, V, W float64
var k = 0
var x, y float32 = -1, -2
// Usage with :=
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
від довідкового документа: ( tour.golang.org )
Усередині функції , то:= оператор короткого призначення може бути використаний замість вару декларації з неявним типом.
Поза межами функції кожна конструкція починається з ключового слова (var, func тощо), і: = конструкція недоступна.
": =" Використовувати для одночасного оголошення та ініціалізації, наступний приклад.
Використання "="
var i int
i = 10
https://play.golang.org/p/RU88ty_SGa
Використання ": ="
i: = 10
Обидва є різною технікою змінного оголошення в мові Go.
var firstName = "John" // is a variable declaration
І
firstName := "John" // is a short variable declaration.
Коротке оголошення змінної - це скорочення для звичайного оголошення змінної з виразами ініціалізатора, але без типів.
Детальніше читайте нижче: