Golang运算符之间的区别:= vs =

在去=和:=运算符之间有什么区别? 他们都似乎是分配? 这可能是显而易见的,但我似乎无法在文档中find它:

只有=是赋值运算符。

:=实际上根本不是一个操作符 。 它是Shortvariables声明子句语法的一部分。

在Go中, :=用于声明+赋值,而=仅用于赋值。

例如, var foo int = 10foo := 10相同。

:=是一个简短的声明。

 a := 10 b := "gopher" 

a将被声明为一个int并且初始化值为10 ,其中b将被声明为一个string并且用值gopher初始化。

他们的等价物将使用=

 var a = 10 var b = "gopher" 

=是赋值运算符。 它的使用方式与您在其他语言中使用的方式相同。

声明variables和初始化程序时,可以省略该types( http://tour.golang.org/#11 )。

:=声明和指定, =只是分配

当你不想用types或结构声明来填充你的代码的时候这很有用。

 // 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 )

在函数内部 ,可以使用:= short赋值语句来代替隐式types的var声明。

在一个函数之外 ,每个构造都以一个关键字(var,func等等)开头,并且:=构造不可用。

正如其他人已经解释过的, :=是用于声明和赋值,并试图自动猜测( 推断 )variables的types。

这是一个简短的forms:

 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 

因为, :=引入了“一个新的variables” ,因此使用它两次不会重新声明第二个variables,所以它是非法的。


但是, 如果其中一个variables是新的可以在“多variables”声明中使用它们两次:

 foo, bar := someFunc() foo, jazz := someFunc() // <-- jazz is new baz, foo := someFunc() // <-- baz is new 

这是合法的,因为你不是重新声明variables,你只是给现有的variables重新分配新的值,还有一些新的variables。


如果在之前已经声明了一个具有相同名称的variables,则可以使用它们:

 var foo int = 34 func some() { // because foo here is scoped to some func foo := 42 // <-- legal foo = 314 // <-- legal } 

在这里, foo := 42是合法的,因为它在some() func的范围内重新声明了foofoo = 314是合法的,因为它只是为foo重新赋值。

_


您可以将它们用于多variables声明和分配:

 foo, bar := 42, 314 jazz, bazz := 22, 7 

_


你可以在scoped语句的上下文中重用它们: ifforswitch

 foo := 42 if foo := someFunc(); foo == 314 { // foo is scoped to 314 here // ... } // foo is still 42 here 

因为, if foo := ...赋值,只能访问该if子句。


所以,作为一般规则:除非你重新声明一个variables,否则你可以使用:= ,或者,如果你想覆盖现有的值,你可以使用=

这两种语言都是Go语言中variables声明的不同方法。

 var firstName := "John" // is a variable declaration 

 firstName := "John" // is a short variable declaration. 

一个简短的variables声明是具有初始化expression式但没有types的正则variables声明的简写。

阅读下面的细节:

variables声明

短variables声明

“:=”同时用于声明和初始化,下面是一个例子。

使用“=”

var i int

我= 10

https://play.golang.org/p/RU88ty_SGa

“:=”的用法

我:= 10

https://play.golang.org/p/XBdjBh-DQB