Golang运算符之间的区别:= vs =
在去=和:=运算符之间有什么区别? 他们都似乎是分配? 这可能是显而易见的,但我似乎无法在文档中find它:
只有=是赋值运算符。 
  :=实际上根本不是一个操作符 。 它是Shortvariables声明子句语法的一部分。 
 在Go中, :=用于声明+赋值,而=仅用于赋值。 
 例如, var foo int = 10与foo := 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的范围内重新声明了foo 。  foo = 314是合法的,因为它只是为foo重新赋值。 
_
您可以将它们用于多variables声明和分配:
 foo, bar := 42, 314 jazz, bazz := 22, 7 
_
你可以在scoped语句的上下文中重用它们: if , for , switch :
 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声明