В чем разница между оператором =
и :=
Go? Они оба, кажется, для назначения? Это может быть очевидно, но я не могу найти это в документах.
Разница между: = и = операторами в Go
Ответ 1
Only =
является оператором присваивания.
:=
является частью синтаксиса предложения Short переменные объявления.
Ответ 2
В Go, :=
используется для объявления + назначения, тогда как =
предназначен только для назначения.
Например, var foo int = 10
совпадает с foo := 10
.
Ответ 3
Как уже объяснили другие,: :=
предназначен как для объявления, присвоения, так и для повторного объявления; и он угадывает (выводит) тип переменной автоматически.
Это сокращенная форма:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
Некоторые правила
Вы не можете использовать :=
из funcs
. Это потому, что из любой функции оператор должен начинаться с ключевого слова.
illegal := 42
func foo() {
legal := 42
}
Вы не можете использовать их дважды (в одной области видимости):
legal := 42
legal := 42 // <-- error
Потому что :=
вводит "новую переменную", следовательно, ее повторное использование дважды не объявляет вторую переменную, поэтому она недопустима.
Однако вы можете использовать их дважды в объявлениях с несколькими переменными, если одна из переменных является новой:
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
Это допустимо, потому что вы не объявляете все переменные, вы просто переназначаете новые значения существующим переменным и одновременно объявляете новые переменные.
Вы можете использовать краткое объявление, чтобы объявить переменную в более новой области видимости, даже если эта переменная уже была объявлена с тем же именем ранее:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Здесь foo := 42
допустимо, потому что оно объявляет foo
в some()
области видимости some()
. foo = 314
допустимо, потому что оно просто присваивает foo
новое значение.
Вы можете использовать их для объявления и назначения нескольких переменных:
foo, bar := 42, 314
jazz, bazz := 22, 7
Вы можете объявить одно и то же имя в блоках коротких операторов, таких как: if, for, switch:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Потому что foo
in if foo :=...
, принадлежит только этому предложению if
и находится в другой области видимости.
Итак, как общее правило: если вы хотите легко объявить переменную, вы можете использовать :=
, или, если вы хотите перезаписать существующее значение, вы можете использовать =
.
Рекомендации:
Ответ 4
:=
является короткой для объявления.
a := 10
b := "gopher"
a
будет объявлен как int
и инициализирован значением 10
, где as b
будет объявлен как строка и инициализирован значением gopher
.
Их эквиваленты с использованием =
были бы
var a = 10
var b = "gopher"
=
- оператор присваивания. Он используется так же, как и на любом другом языке.
Вы можете опустить тип при объявлении переменной, и присутствует инициализатор (http://tour.golang.org/#11).
Ответ 5
Значения: = объявляют и назначать, а = означает просто назначить.
Ответ 6
:=
объявляет и присваивает, =
просто назначает
Это полезно, когда вы не хотите заполнять свой код объявлениями типа или структуры.
// 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)
Ответ 7
из справочного документа: (tour.golang.org)
Внутри функции короткий оператор присваивания :=
может использоваться вместо объявления var с неявным типом.
Вне функции каждая конструкция начинается с ключевого слова (var, func и т.д.), а конструкция: = недоступна.
Ответ 8
": =" использовать для объявления и инициализации в одно и то же время, следующий пример.
Использование "="
var я int
i = 10
https://play.golang.org/p/RU88ty_SGa
Использование ": ="
i: = 10
Ответ 9
Это разные методы объявления переменных в языке Go.
var firstName = "John" // is a variable declaration
А ТАКЖЕ
firstName := "John" // is a short variable declaration.
Краткое объявление переменной является сокращением для объявления обычной переменной с выражениями инициализатора, но без типов.
Читайте ниже для деталей:
Ответ 10
Как уже говорили многие: - означает: объявлять и присваивать; = означает просто назначить. Важным примечанием здесь является то, что если в функции вы делаете
foo := 2.5
тогда Go решает, является ли foo float32 или float64, основываясь на нескольких вещах, но однажды решив и скомпилировав как float64, вы не можете использовать foo как float32 и наоборот. Поэтому иногда лучше использовать полный синтаксис.