我不太明白短期作业的具体目的,
为什么这样做:
x:= 10
当这也是可能的:
var x = 10
是否有任何特定用例可以让短任务更方便谢谢
if x, err := fn(); err != nil {
// do something
}
在上述情况下,变量被限制在 if 语句中。如果您尝试err
在 if 语句之外访问,它将不可用。同样对于x
. 在各种情况下,像这样维护范围可能很有用,但我想说:=
is 用于给定的样式,如上面的if
, switch
, for
。
对于一些额外的背景,var
也允许分组,很像使用import
.
var (
y = 1
z = 2
)
var
这将vs的用例推得:=
更远。
示例 1:
var age int = 30
示例 2:
var age = 30
示例 3:
age := 30
上面所有的例子都是一样的。示例 2和示例 3只是简单地“推断”类型。它也是一种速记。以下是公共领域的摘录 - 知识共享 pdf,“Go 编程简介”,作者 Caleb Doxsey
'由于创建具有起始值的新变量是如此普遍,Go 还支持更短的语句:
x := "Hello World"
注意:
之前的=
并且没有指定类型。类型不是必需的,因为 Go 编译器能够根据您分配变量的文字值推断类型。(由于您要分配字符串文字,因此 x 被赋予类型字符串)
编译器还可以使用 var 语句进行推断:
var x = "Hello World"
同样的事情适用于其他类型:
x := 5
fmt.Println(x)
通常,您应该尽可能使用这种较短的形式。
我相信这:=
主要是作为一种方便的语法来接收函数调用的结果,人们经常希望重用现有变量,同时声明一个新变量:
x, err := func1()
if err != nil {
fmt.Fatal(err)
}
y, err := func2()
if err != nil {
fmt.Fatal(err)
}
上面的代码编译是因为:=
允许列出现有变量,只要至少创建一个新变量。尝试替换y, err :=
为var y, err =
,您会发现它无法编译。
在这种情况下没有理由,它们是等价的。
当你有这个时它是有道理的
var i int
i = 0
所以你可以更简洁并推断类型
i := 0
但除此之外,它们完全相同。
x := fn()
这将使x
类型与函数的返回类型相同fn
。如果你重构你的代码并且fn
改变了返回类型,x
's 的类型将被免费改变。
...而且打字更少。