In Go, в чем разница между оператором =
и :=
? Оба они кажутся для назначения? Это может быть очевидно, но я не могу найти его в документах.Разница между операторами Golang между: = vs =
ответ
Только оператор =
является оператором присваивания.
:=
на самом деле не operator. Он является частью синтаксиса предложения Short variable declarations.
Спасибо всем: D и спасибо jnml за ссылку на документацию – Chris
, так это означает переменную с выведенным типом? правильно? –
The: = означает объявление и присваивать while = означает просто назначить.
In Go, :=
для декларации + назначение, тогда как =
предназначен только для назначения.
Например, var foo int = 10
- это то же, что и foo := 10
.
Вы не подразумеваете 'var foo int = 10'? В Go тип появляется после имени переменной. – amon
@amon right, извините, я не слишком хорошо знаком с синтаксисом go, позвольте мне изменить это – Chaos
Это должен быть ответ. Примеры являются гораздо более полезными, чем просто ссылка на документацию. – rottenoats
:=
объявляет и правопреемников, =
просто присваивает
Это полезно, когда вы не хотите, чтобы заполнить ваш код объявлений типа или структуры.
// 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)
:=
является кратким объявлением.
a := 10
b := "gopher"
a
будет объявлен как int
и инициализируется со значением 10
где, как b
будет объявлен в виде строки и инициализируется со значением gopher
.
их эквиваленты с использованием =
бы
var a = 10
var b = "gopher"
=
является оператором присваивания. Он используется так же, как и на любом другом языке.
Вы можете опустить тип при объявлении переменной и инициализаторе (http://tour.golang.org/#11).
от эталонного дока: (tour.golang.org)
Внутри функций, оператор короткого ДЕЛЕГИРОВАНИЯ :=
может использоваться вместо вара декларации с неявным типом.
Внешняя функция, каждая конструкция начинается с ключевого слова (var, func и т. Д.), А конструкция: = недоступна.
Оба являются различными методами объявления переменных в языке Go.
var firstName := "John" // is a variable declaration
И
firstName := "John" // is a short variable declaration.
Короткого объявление переменного является обобщающим для обычного объявления переменного с инициализатором выражениями, но без каких-либо типов.
Читай ниже подробно:
Я думаю, что ваш синтаксис неверен для первого примера. Вместо: var firstName: = "John", это должно быть: var firstName = "John" – Gino
«: =» использует, чтобы сделать декларацию и initilization в то же время, Ниже приведен пример.
Использование «=»
вар я Int
I = 10
https://play.golang.org/p/RU88ty_SGa
Использование «: =»
я: = 10
Как уже объяснили другие, :=
предназначен как для объявления, так и для назначения, и пытается угадать (infer) тип переменной автоматически.
Это стенография форма:
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
является законным, потому что, redeclares foo
в рамках some()
Func в. foo = 314
является законным, потому что он просто переназначает новое значение foo
.
_
Вы можете использовать их для нескольких переменных деклараций и заданий:
foo, bar := 42, 314
jazz, bazz := 22, 7
_
Вы можете использовать их в контекстном заявлении контекстов как: если, за, переключатель:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Потому что, if foo := ...
назначение, доступны только для этого if
пункта.
Таким образом, как общее правило: Если вы не повторного объявления переменной можно использовать :=
, или, если вы хотите перезаписать существующие значения, вы можете использовать =
.
Спасибо за упоминание всех случаев использования. – AnirbanDebnath
** Также см. Это **: [Перейдите на Визуальный указатель переменных] (https://blog.learngoprogramming.com/learn-go-lang-variables-visual-tutorial-and-ebook-9a061d29babe). Я написал статью об этом. –
Семантика ... – JustDave