最近我在玩Google的新编程语言Go
并且想知道为什么赋值运算符为什么在:=
等号前面有一个冒号=
?语言的作者为什么要使用name := "John"
而不是name = "John"
Answers:
name := "John"
只是语法糖
var name string
name = "John"
Go是静态类型的,因此您必须声明变量。
name := "John"
是的简写var name = "John"
。
var name = "John"
缩写为var name string = "John"
给定的两行。
:=
不是赋值运算符。这是一个简短的变量声明。=
是赋值运算符。
简短的变量声明使用以下语法:
ShortVarDecl = IdentifierList ":=" ExpressionList .
这是带有初始化表达式但没有类型的常规变量声明的简写:
"var" IdentifierList = ExpressionList .
Assignment = ExpressionList assign_op ExpressionList .
assign_op = [ add_op | mul_op ] "=" .
在Go中,name := "John"
是的简写var name = "John"
。
答案的重要背景:
:=
是用于初始化变量的简写运算符。在Go中,以下操作是等效的:
var myNumb String = "one"
myNumb := "one"
回答:
现在的隐含的问题是:“为什么去设计速记符号:=
有:
前=
?”。原因是为了防止常见的错别字。如果速记运算符是just =
,那么您可能会遇到以下情况:
var myNumb String = "one"
myNumb = "two"
现在,创建该代码的用户是否打算重新分配two
给该用户myNumb
,还是输入错误myNumb
而不是正确输入myNumbTwo
?通过将冒号包含在内:=
,程序员将不得不犯两个错误(忘记冒号而忘记了var
)以产生错误,从而大大降低了这样做的可能性。