为什么使用'='而不是':='?

时间:2013-07-13 19:38:06

标签: go

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

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

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

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

3 个答案:

答案 0 :(得分:9)

:=用于短变量声明;它都在左侧声明变量,然后分配给它们。 (这在the "Short variable declarations" section of The Go Programming Language Specification中有解释。)

相比之下,

=仅执行作业。

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

答案 1 :(得分:5)

=assignement operators之一。

:=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(); 正在创建一个新的局部变量。