go - := and = in Go?有什么区别

标签 go colon-equals

我是 Go 编程语言的新手。

我注意到 Go 中有一些奇怪的地方:我认为它使用了 := 并在 Python 中替代了 =,但是当我使用 = 时去它也是有效的。

:== 有什么区别?

最佳答案

= 是赋值。关于 Go 中赋值的更多信息:Assignments

=:= 之间的细微差别在于 = 用于变量声明的时间。

Go 中变量声明的一般形式是:

var name type = expression

上面的声明创建了一个特定类型的变量,为其附加了一个名称,并设置了它的初始值。 type= expression 可以省略,但不能同时省略。

例如:

var x int = 1
var a int
var b, c, d = 3.14, "stackoverflow", true

:= 被称为 short variable declaration 形式

name := expression

名字的类型由表达式的类型决定

请注意::= 是一个声明,而 = 是一个赋值

因此,简短的变量声明必须声明至少一个新变量。这意味着一个简短的变量声明不一定在其左侧声明所有变量,当其中一些变量已经在同一个词法 block 中声明时,:= 就像对那些变量的赋值变量

例如:

 r := foo()   // ok, declare a new variable r
 r, m := bar()   // ok, declare a new variable m and assign r a new value
 r, m := bar2()  //compile error: no new variables

此外,:= 可能只出现在函数内部。在某些上下文中,例如“if”、“for”或“switch”语句的初始值设定项,它们可用于声明局部临时变量。

更多信息:

variable declarations

short variable declarations

关于go - := and = in Go?有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512919/

相关文章:

go - 在 vagrant vbox 上安装 golang 1.10

go - 如果 len 没有改变,为什么 Go 中 Array/Slice 的指针会改变?

go - 如何从 Telnet session 读取数据

go - 复合类型和指针方法

vb.net - := mean in VB? 是什么

postgresql - 被遗忘的赋值运算符 "="和常见的 ":="

r - 关于错误 ":= and ` : =`(...) are defined for use in j, once only and in particular ways. See help(": =")"

go - 下面的两个go代码有什么区别,为什么要使用这么多不同的内存

r - 解析包含 `:=` 的表达式?

r - 使用 := in data. 表按组分配多列