我正在查看Go-SQL-Driver
here的示例代码:
//Insert
stmt, err := db.Prepare("INSERT userinfo SET username=?")
// Update
stmt, err = db.Prepare("update userinfo set username=?")
为什么在Insert
我们使用:=
,但在Update
我们使用=
?在我看来,两者都应该是:=
答案 0 :(得分:9)
:=
用于短变量声明;它都在左侧声明变量,然后分配给它们。 (这在the "Short variable declarations" section of The Go Programming Language Specification中有解释。)
=
仅执行作业。
在您的示例中,第二行使用=
因为变量已经声明(通过第一行),因此不需要:=
。 (事实上,它会给出一条错误信息::=
仅在至少有一个变量为“new”时才允许,即尚未声明。)
答案 1 :(得分:5)
:=
是short variable declaration。
在引用的链接中你可以发现语义是完全不同的,所以实际上“而不是”的概念有点问题。
一个可能有用的mnemotechnic规则:
identifierI := expressionE
与
相同var identifierI = expressionE
与
相同var identifierI typeOf(expressionE)
identifierI = expressionE
答案 2 :(得分:0)
:=
是为了方便起见。重要的区别在于:=
进行类型推断,因此它声明并将变量分配给所有一行,变量类型是从函数的返回值类型推断的。
这使得您的程序在大多数情况下更易于阅读,但确实意味着有人必须在文档中查找函数的返回值类型以找出变量的类型。
当您重新分配现有变量或从函数中分配全局/包变量时,您将要使用=
,否则,您将会使用URI partial = new URI(
null, // scheme
null, // user info
uri.getHost(),
uri.getPort(),
uri.getPath(),
null, // query
null); // fragment
String text = partial.toString();
正在创建一个新的局部变量。