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声明