=
和:=
运算符之间有什么区别,它们的用例是什么?他们俩似乎都是为了一项任务?
x := uint32(123)
。对于大多数人来说,这肯定是显而易见的,但是我不得不思考几分钟;-)
=
和:=
运算符之间有什么区别,它们的用例是什么?他们俩似乎都是为了一项任务?
x := uint32(123)
。对于大多数人来说,这肯定是显而易见的,但是我不得不思考几分钟;-)
Answers:
正如其他人已经解释的那样,:=
它既用于声明,分配,又用于重新声明。它会自动猜测(推断)变量的类型。
例如,foo := 32
是以下形式的简写形式:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ *有一些规则:* /
★第一法则:
您不能使用:=
out 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
★第四条规则(重新声明):
如果变量之一是new,则可以在“多变量”声明中使用它们两次:
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
是合法的,因为,它foo
在some()
func的范围内声明。foo = 314
是合法的,因为它只是为分配了一个新值foo
。
★第六法则:
您可以在简短的语句块中声明相同的名称,例如:if,for,switch:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
因为foo
in中的if foo := ...
,仅属于该if
子句,并且在不同的范围内。
因此,作为一般规则:如果要轻松声明一个变量,可以使用
:=
;或者,如果只想覆盖一个现有变量,则可以使用=
。
参考文献:
:=
是声明的简写。
a := 10
b := "gopher"
a
将被声明为int
并使用value初始化,10
其中as b
将被声明为一个字符串并使用value初始化gopher
。
其等效使用=
将是
var a = 10
var b = "gopher"
=
是赋值运算符。它的使用方式与其他任何语言一样。
声明变量时,可以省略类型,并且存在初始化程序(http://tour.golang.org/#11)。
=
)只是比较和:=
分配...
“:=”用于同时进行声明和初始化,下面是一个示例。
“ =”的用法
var i int
我= 10
https://play.golang.org/p/RU88ty_SGa
“:=”的用法
我:= 10
两者都是Go语言中变量声明的不同技术。
var firstName = "John" // is a variable declaration
和
firstName := "John" // is a short variable declaration.
简短变量声明是带有初始化表达式但没有类型的常规变量声明的简写。
详细阅读以下内容: