Разница между: = и = операторами в Go

В чем разница между оператором = и := Go? Они оба, кажется, для назначения? Это может быть очевидно, но я не могу найти это в документах.

Ответ 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 и т.д.), а конструкция: = недоступна.

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