=和:=操作符之间的区别是什么,它们的用例是什么?他们似乎都是来执行任务的?
=
:=
只有=是赋值运算符。
:=表示声明而且赋值,而=表示简单地赋值。
在Go中,:=用于声明+赋值,而=仅用于赋值。
例如,var foo int = 10与foo := 10相同。
var foo int = 10
foo := 10
:=声明并赋值,=只赋值
当您不想用类型或结构声明填充代码时,它很有用。
// 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初始化。
a
int
10
b
gopher
它们使用=的等价物将是
var a = 10 var b = "gopher"
=是赋值运算符。它的使用方式与你在任何其他语言中使用它的方式相同。
当声明变量且存在初始化式时,可以省略类型(http://tour.golang.org/#11)。
从引用文档:(tour.golang.org)
在函数内部, :=短赋值语句可以用来代替隐式类型的var声明。
在函数外,每个构造都以关键字(var, func等)开始,并且:=构造不可用。
正如其他人已经解释过的,:=既用于声明、赋值,也用于重声明;并自动猜测(推断)变量的类型。
例如,foo := 32是以下语句的简写形式:
foo := 32
var foo int foo = 32 // OR: var foo int = 32 // OR: var foo = 32
< em > /有一些规则:/
第一条规则:
你不能在funcs之外使用:=。这是因为,在func之外,语句应该以关键字开头。
funcs
// no keywords below, illegal. illegal := 42 // `var` keyword makes this statement legal. var legal = 42 func foo() { alsoLegal := 42 // reason: it's in a func scope. }
★第二条规则:
你不能使用它们两次(在同一范围内):
legal := 42 legal := 42 // <-- error
因为:=引入了“新变量”;,因此使用它两次不会重新声明第二个变量,所以它是非法的。
★第三条规则:
你可以将它们用于多变量声明和赋值:
foo, bar := 42, 314 jazz, bazz := 22, 7
★第四条规则(重新声明):
你可以在“multi-variable"声明中使用它们两次,如果其中一个变量是新的:
foo, bar := someFunc() foo, jazz := someFunc() // <-- jazz is new baz, foo := someFunc() // <-- baz is new
这是合法的,因为,你没有声明所有的变量,你只是重新分配新值给现有的变量,同时声明新变量。这被称为redeclaration。
第五条规则:
你可以使用简短的声明在一个新的作用域中声明一个变量,即使这个变量之前已经声明了相同的名称:
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赋了一个新值。
foo := 42
some()
foo
foo = 314
★第六条规则:
你可以在简短的语句块中声明相同的名称,例如:如果, 为, 开关:
foo := 42 if foo := someFunc(); foo == 314 { // foo is scoped to 314 here // ... } // foo is still 42 here
因为,if foo := ...中的foo只属于那个if子句,而且它在不同的作用域中。
if foo := ...
if
所以,作为一般规则:如果你想简单地声明一个变量,你可以使用:=,或者,如果你只想覆盖一个现有的变量,你可以使用=。
引用:
例如:
var s string = "Omkar" s:= "Omkar"