=和:=运算符之间有什么区别,它们的用例是什么?它们似乎都用于赋值?
=
:=
bvk5enib1#
在Go语言中,:=用于声明+赋值,而=仅用于赋值。例如,var foo int = 10与foo := 10相同。
var foo int = 10
foo := 10
00jrzges2#
TLDR:
正如其他人已经解释过的,:=既用于声明、赋值,也用于重新声明;它会自动猜测(* 推断 *)变量的类型。
例如,foo := 32是以下的简写形式:
foo := 32
var foo int foo = 32 // OR: var foo int = 32 // OR: var foo = 32
/ 规则如下:/**★第一条规则:
你不能在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
★第四条规则(重新声明):
可以在**“多变量”声明中使用两次, 如果其中一个变量是new:
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
★第六条:
您可以在短语句块中声明相同的名称,如:if,for,switch:
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
参考资料:
thtygnil3#
只有=是 * 赋值运算符 *。:=是 short variable declaration 子句语法的一部分。👉 不过还是有一些规则的,详见this other answer。
tktrz96b4#
:=是声明的缩写。
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)。
9udxz4iz5#
:=表示声明和赋值,而=表示简单的赋值。
axr492tv6#
:=声明并赋值,=仅赋值当您不想用类型或结构声明填充代码时,它很有用。
// 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)
wn9m85ua7#
参考文档:(tour.golang.org)
在函数内部,可以使用:=短赋值语句代替隐式类型的var声明。在函数外部,每个构造都以关键字(var、func等)开头,并且:=构造不可用。
klh5stk18#
在Go语言中,:=也用于声明和赋值,而=只用于赋值例如:
var s string = "Omkar" s:= "Omkar"
8条答案
按热度按时间bvk5enib1#
在Go语言中,
:=
用于声明+赋值,而=
仅用于赋值。例如,
var foo int = 10
与foo := 10
相同。00jrzges2#
TLDR:
:=
。=
.正如其他人已经解释过的,
:=
既用于声明、赋值,也用于重新声明;它会自动猜测(* 推断 *)变量的类型。例如,
foo := 32
是以下的简写形式:/ 规则如下:/**
★第一条规则:
你不能在
funcs
之外使用:=
,这是因为在func之外,一个语句应该以一个关键字开始。★第二条规则:
你不能使用它们两次(* 在同一个作用域中 *):
因为
:=
引入了**“一个新变量”**,所以使用它两次不会重新声明第二个变量,所以它是非法的。★第三条:
您可以将它们用于多变量声明和赋值:
★第四条规则(重新声明):
可以在**“多变量”声明中使用两次, 如果其中一个变量是new:
这是法律的的,因为,你没有声明所有的变量,你只是重新分配新的值给现有的变量,同时声明新的变量。这被称为 redeclaration。
★第五条:
你可以使用短声明在一个新的作用域中声明一个变量,即使该变量已经在之前用相同的名字声明过:
在这里,
foo := 42
是法律的的,因为它在some()
func的作用域中声明了foo
。foo = 314
是合法的,因为它只是给foo
赋值。★第六条:
您可以在短语句块中声明相同的名称,如:if,for,switch:
因为
if foo := ...
中的foo
只属于if
子句,并且它在不同的作用域中。参考资料:
thtygnil3#
只有
=
是 * 赋值运算符 *。:=
是 short variable declaration 子句语法的一部分。👉 不过还是有一些规则的,详见this other answer。
tktrz96b4#
:=
是声明的缩写。a
将被声明为int
并使用值10
初始化,其中b
将被声明为字符串并使用值gopher
初始化。使用
=
时,它们的等效值为=
是赋值运算符。它的使用方式与在任何其他语言中使用它的方式相同。当声明变量时,如果有初始化器,可以省略类型(http://tour.golang.org/#11)。
9udxz4iz5#
:=表示声明和赋值,而=表示简单的赋值。
axr492tv6#
:=
声明并赋值,=
仅赋值当您不想用类型或结构声明填充代码时,它很有用。
wn9m85ua7#
参考文档:(tour.golang.org)
在函数内部,可以使用
:=
短赋值语句代替隐式类型的var声明。在函数外部,每个构造都以关键字(var、func等)开头,并且:=构造不可用。
klh5stk18#
在Go语言中,
:=
也用于声明和赋值,而=
只用于赋值例如: