Go语言中的赋值运算符

时间:2013-05-13 11:56:28

标签: syntax go

最近我正在使用谷歌的新编程语言Go

并且想知道为什么赋值运算符:=在等号前面有一个冒号= 该语言的作者是否有特殊原因想要使用name := "John"代替name = "John"

7 个答案:

答案 0 :(得分:109)

:=表示法既可以作为声明也可以作为初始化。

foo := "bar"

相当于

var foo = "bar"

为什么不使用任何脚本语言中的foo = "bar",您可能会问?好吧,这是为了避免拼写错误。

foo = "bar"
fooo = "baz" + foo + "baz"   // Oops, is fooo a new variable or did I mean 'foo' ?

答案 1 :(得分:32)

name := "John"

只是

的语法糖
var name string
name = "John"

Go是静态类型的,因此您必须声明变量。

答案 2 :(得分:18)

:=不是赋值运算符。这是一个简短的变量声明。 =是赋值运算符。

  

Short variable declarations

     

短变量声明使用语法:

     

ShortVarDecl = IdentifierList ":=" ExpressionList .

     

它是使用初始化程序进行常规变量声明的简写   表达式,但没有类型:

     

"var" IdentifierList = ExpressionList .

     

Assignments

     

Assignment = ExpressionList assign_op ExpressionList .

     

assign_op = [ add_op | mul_op ] "=" .

在Go中,name := "John"var name = "John"的缩写。

答案 3 :(得分:10)

Rob Pike explains为什么Go在他的演讲中有:=" Goins of Go" (2010)。

:=是Pike编写的另一种语言的伪运算符,叫做Newsquek(1989)。 其中有Pascal-ish表示法和推断类型的能力,用于声明和初始化成语(page 15

// variable: [type] = value
x: int = 1
x := 1

边缘注释: Robert Griesemer brings up :=运营商回答问题"你从Go中拿走了什么?"在Google I / O 2013的质量保证会议期间。将其称为方便但有问题的

答案 4 :(得分:4)

两者都是Go语言中变量声明的不同技术。

var name = "John" // is a variable declaration 

AND

name := "John"   // is a short variable declaration. 

短变量声明是具有初始化表达式但没有类型的常规变量声明的简写。

请阅读以下详细信息:

Variable declarations

Short variable declarations

答案 5 :(得分:2)

答案的重要背景:

:=是用于初始化变量的简写运算符。在开始中,以下操作是等效的:

var myNumb String = "one"
myNumb := "one"

<强>答案:

现在隐含的问题是:“为什么设计速记符号:=以在:之前设置=?”。原因是为了防止普遍存在的错别字。如果简写赋值运算符只是=,那么您可能会遇到以下情况:

var myNumb String = "one"
myNumb = "two"

创建该代码的用户现在是否打算将two重新分配给myNumb,还是错误地键入myNumb而不是正确键入myNumbTwo?通过在:=中包含冒号,程序员必须提交两个错误(忘记冒号并忘记var)以便有一个错误,从而减少这样做的可能性

答案 6 :(得分:2)

之间至少有一个微妙的区别
name := "John"

var name = "John"

前者是非声明语句,不允许在函数体之外,而后者是包级别的有效语句。