0

我正在查看Go-SQL-Driver 此处的示例代码:

//Insert
    stmt, err := db.Prepare("INSERT userinfo SET username=?")

// Update
    stmt, err = db.Prepare("update userinfo set username=?")

为什么在Insert我们使用:=但在Update我们使用=?在我看来,两者都应该是:=

4

3 回答 3

9

:=用于短变量声明;它都在左侧声明变量,并分配给它们。(这在Go 编程语言规范的“短变量声明”部分中有解释。)

=相比之下,仅执行分配。

在您的示例中,第二行使用=,因为变量已经被声明(第一行),所以:=不需要。(事实上​​,它会给出一个错误信息::=仅当至少有一个变量是“新的”时才允许,即尚未声明。)

于 2013-07-13T19:44:05.973 回答
5

=赋值运算符之一。

:=短变量声明

在引用的链接中,您可以发现语义完全不同,因此实际上“代替”的概念有点问题。

一个可能有用的助记规则:

identifierI := expressionE

是相同的

var identifierI = expressionE

这与

var identifierI typeOf(expressionE)
identifierI = expressionE
于 2013-07-13T19:44:13.240 回答
0

:=是为了方便。重要的区别在于:=dos 类型推断,因此当它在一行中声明和分配变量时,变量类型是从函数的返回值的类型推断出来的。

这使您的程序在大多数情况下更易于阅读,但确实意味着有人必须在文档中查找函数的返回值类型以找出变量的类型。

=当您重新分配给现有变量或从函数内分配给全局/包变量时,您将需要使用,否则,您将创建一个新的局部变量。

于 2016-01-06T17:44:27.913 回答