在Go语言中,:=是什么意思?

19

我正在按照这个教程学习,具体是第8个练习:

http://tour.golang.org/#8


package main

import "fmt"

func swap(x, y string) (string, string) {
    return y, x
}

func main() {
    a, b := swap("hello", "world")
    fmt.Println(a, b)
}

:=是什么意思?搜索Go文档十分困难,具有讽刺意味。


1
@BenjaminGruenbaum 我想这是一个知道该搜索什么的情况。我尝试了 go := meaninggolang :=,但没有找到相关的内容。 - sergserg
说句实话,这不是我通常寻找 Go 资源/规范的地方。 - Benjamin Gruenbaum
7
如果你在语言学习中遇到了不理解的内容,不要使用Google搜索(因为标点符号可能会导致搜索结果不准确),可以直接打开golang.org/ref/spec,在其中进行搜索。这是该语言的实际规范,非常简单明了。页面上的第二个":="就是你想要的内容。 - Lily Ballard
2
在教程中有解释(http://tour.golang.org/#12) - user1106925
我是从谷歌来的,所以这个问题可能并不完全无效。 - Doug Molineux
这只是声明和初始化变量的一种简写方式(或者使用逗号时可以同时声明多个变量)。类型是从传入的值中推断出来的。所以在你的情况下,你将有两个变量ab,都是string类型,用从swap("hello", "world")返回的值进行初始化。 - pjmonk
7个回答

21

短变量声明 使用以下语法:

ShortVarDecl = IdentifierList ":=" ExpressionList .

它是具有初始化表达式但没有类型的常规变量声明的速记:


8

继续前往巡回的第12页!

Go 之旅

短变量声明

在函数内部,可以使用 := 短赋值语句代替具有隐式类型的 var 声明。

(在函数外部,每个结构都以关键字开头,:= 结构不可用。)


7

正如其他人已经解释过的那样,:= 用于声明和赋值,而 = 只用于赋值。

例如,var abc int = 20 与 abc := 20 是一样的。

当您不想在代码中填充类型或结构声明时,这非常有用。


把我的评论当作一个小玩笑:没有回答应该以“正如其他人已经解释的那样…”开头,对吧? - Ferran Maylinch

5
:=语法是声明和初始化变量的简写形式,例如f:="car"var f string ="car"的简写形式。 短变量声明运算符(:=)只能用于声明局部变量。如果您尝试使用短声明运算符声明全局变量,则会出现错误。
请参考官方文档获取更多详情。

1
你可以像被采纳的答案那样添加一个指向官方文档的链接。我认为这个符号只能用于局部变量,对吗?如果是这样的话,你可以加上这一点。 - Ferran Maylinch
@FerranMaylinch 谢谢您提出的建议,使它更准确。 - Arun
1
很有趣,你得到了一个负面投票,然后有人写了相同的答案。 - Ferran Maylinch

1

0
根据我在Go方面的书籍,它只是一个短变量声明语句,与以下内容完全相同。
var s = ""

不过,它更容易声明,并且其范围较小。A:=变量声明也不能具有 interface{} 类型。不过这可能是你几年后才会遇到的问题。


两者之间唯一的区别是var可以在全局范围内使用。您还可以在函数中使用var,它的行为与:=完全相同。此外,您可以在var声明中使用interface{}类型。 - pjmonk

-2

:=代表一个变量,我们可以使用:=为变量赋值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接