在Go中, = 和 := 运算符之间有什么区别?他们似乎都是为了任务?这可能是显而易见的,但我似乎无法在文档中找到它 .
=
:=
只有 = 是赋值运算符 .
:= 实际上根本不是operator . 它是Short variable declarations子句语法的一部分 .
在Go中, := 用于声明分配,而 = 仅用于分配 .
例如, var foo int = 10 与 foo := 10 相同 .
var foo int = 10
foo := 10
正如其他人已经解释的那样, := 既适用于声明,转让,也适用于重新申报;它会自动猜测(推断)变量的类型 .
这是一种简短的形式:
var foo int foo = 32 // OR: var foo int = 32 // OR: var foo = 32
你不能在 funcs 中使用 := . 这是因为,在任何函数中,语句都应该以关键字开头 .
funcs
illegal := 42 func foo() { legal := 42 }
你不能使用它们两次(在相同的范围内):
legal := 42 legal := 42 // <-- error
因为 := 引入了 "a new variable" ,因此使用它两次不会重新声明第二个变量,因此它是非法的 .
但是,如果其中一个变量是新的,则可以在 "multi-variable" 声明中使用它们两次:
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 是合法的,因为它在 some() func的范围内声明 foo . foo = 314 是合法的,因为它只是为 foo 分配了一个新值 .
foo := 42
some()
foo
foo = 314
您可以将它们用于多变量声明和赋值:
foo, bar := 42, 314 jazz, bazz := 22, 7
您可以在短语句块中声明相同的名称,例如: 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
So, as a general rule: 如果要轻松声明变量,可以使用 := ,或者,如果要覆盖现有值,可以使用 = .
References:
Short Variable Declaration Rules
A Visual Guide to Go Variables
:= 是宣言的简称 .
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) .
:= 声明和分配, = 只是分配
当您不想用类型或结构声明填充代码时,它很有用 .
// 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)
:=表示 and 赋值,而=表示简单赋值 .
来自参考文献:(tour.golang.org)
Inside a function , := 短赋值语句可用于代替具有隐式类型的var声明 .
Outside a function ,每个构造都以关键字(var,func等)开头,并且:=构造不可用 .
“:=”用于同时进行声明和启动,以下是一个例子 .
使用“=”
var i int
我= 10
https://play.golang.org/p/RU88ty_SGa
使用“:=”
我:= 10
https://play.golang.org/p/XBdjBh-DQB
两者都是Go语言中变量声明的不同技术 .
var firstName := "John" // is a variable declaration
和
firstName := "John" // is a short variable declaration.
短变量声明是具有初始化表达式但没有类型的常规变量声明的简写 .
请阅读以下详细信息:
Variable declarations
Short variable declarations
正如许多人已经说过的那样:=表示声明和分配; =表示简单分配 . 这里重要的一点是,如果你在功能上
foo := 2.5
然后Go决定 foo 是基于几个东西是float32还是float64,但是一旦决定并编译为float64,就不能使用 foo 作为float32,反之亦然 . 因此,有时最好使用完整语法 .
10 回答
只有
=
是赋值运算符 .:=
实际上根本不是operator . 它是Short variable declarations子句语法的一部分 .在Go中,
:=
用于声明分配,而=
仅用于分配 .例如,
var foo int = 10
与foo := 10
相同 .正如其他人已经解释的那样,
:=
既适用于声明,转让,也适用于重新申报;它会自动猜测(推断)变量的类型 .这是一种简短的形式:
一些规则
你不能在
funcs
中使用:=
. 这是因为,在任何函数中,语句都应该以关键字开头 .你不能使用它们两次(在相同的范围内):
因为
:=
引入了 "a new variable" ,因此使用它两次不会重新声明第二个变量,因此它是非法的 .但是,如果其中一个变量是新的,则可以在 "multi-variable" 声明中使用它们两次:
这是合法的,因为,您没有声明所有变量,您只是将新值重新分配给现有变量,并同时声明新变量 .
您可以使用简短声明在较新的范围内声明变量,即使该变量已在以下情况下使用相同的名称声明:
这里,
foo := 42
是合法的,因为它在some()
func的范围内声明foo
.foo = 314
是合法的,因为它只是为foo
分配了一个新值 .您可以将它们用于多变量声明和赋值:
您可以在短语句块中声明相同的名称,例如: if , for , switch :
因为
if foo := ...
中的foo
只属于该if
子句,并且它位于不同的范围内 .So, as a general rule: 如果要轻松声明变量,可以使用
:=
,或者,如果要覆盖现有值,可以使用=
.References:
Short Variable Declaration Rules
A Visual Guide to Go Variables
:=
是宣言的简称 .a
将声明为int
并使用值10
初始化,其中b
将声明为字符串并使用值gopher
初始化 .使用
=
的等价物将是=
是赋值运算符 . 它的使用方法与在任何其他语言中使用它的方式相同 .声明变量并且存在初始值设定项时,可以省略类型(http://tour.golang.org/#11) .
:=
声明和分配,=
只是分配当您不想用类型或结构声明填充代码时,它很有用 .
:=表示 and 赋值,而=表示简单赋值 .
来自参考文献:(tour.golang.org)
Inside a function ,
:=
短赋值语句可用于代替具有隐式类型的var声明 .Outside a function ,每个构造都以关键字(var,func等)开头,并且:=构造不可用 .
“:=”用于同时进行声明和启动,以下是一个例子 .
使用“=”
var i int
我= 10
https://play.golang.org/p/RU88ty_SGa
使用“:=”
我:= 10
https://play.golang.org/p/XBdjBh-DQB
两者都是Go语言中变量声明的不同技术 .
和
短变量声明是具有初始化表达式但没有类型的常规变量声明的简写 .
请阅读以下详细信息:
Variable declarations
Short variable declarations
正如许多人已经说过的那样:=表示声明和分配; =表示简单分配 . 这里重要的一点是,如果你在功能上
然后Go决定 foo 是基于几个东西是float32还是float64,但是一旦决定并编译为float64,就不能使用 foo 作为float32,反之亦然 . 因此,有时最好使用完整语法 .