7

我不太明白短期作业的具体目的,

为什么这样做:

x:= 10

当这也是可能的:

var x = 10

是否有任何特定用例可以让短任务更方便谢谢

4

5 回答 5

15
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的用例推得:=更远。

于 2012-09-26T23:01:17.760 回答
2

示例 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)

通常,您应该尽可能使用这种较短形式。

于 2012-10-04T00:37:21.850 回答
2

我相信这:=主要是作为一种方便的语法来接收函数调用的结果,人们经常希望重用现有变量,同时声明一个新变量:

x, err := func1()
if err != nil {
    fmt.Fatal(err)
}
y, err := func2()
if err != nil {
    fmt.Fatal(err)
}

上面的代码编译是因为:=允许列出现有变量,只要至少创建一个新变量。尝试替换y, err :=var y, err =,您会发现它无法编译。

于 2012-10-15T19:31:17.427 回答
1

在这种情况下没有理由,它们是等价的。

当你有这个时它是有道理的

var i int
i = 0

所以你可以更简洁并推断类型

i := 0

但除此之外,它们完全相同。

于 2012-09-26T23:07:16.663 回答
0
x := fn()

这将使x类型与函数的返回类型相同fn。如果你重构你的代码并且fn改变了返回类型,x's 的类型将被免费改变。

...而且打字更少。

于 2012-09-26T22:46:37.353 回答