为什么有:=函数内的短分配?

时间:2012-09-26 22:43:57

标签: go

我不太了解短作业的具体目的,

为什么这样做:

x:= 10

当这也是可能的时候:

var x = 10

是否有任何特定用例,其中短分配更方便 感谢

5 个答案:

答案 0 :(得分:13)

if x, err := fn(); err != nil {
    // do something
}

在上面的例子中,变量被限制在if语句中。如果您尝试在if语句之外访问err,它将无法使用。同样适用于x。在这种情况下,保持这样的范围可能会有用,但我会说使用:=是针对给定的样式,如ifswitchfor

对于其他一些背景,var也允许分组,就像使用import一样。

var (
    y = 1
    z = 2
)

var:=的用例进一步分开。

答案 1 :(得分: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)

一般情况下,你应该使用这种较短的形式每当可能。

答案 2 :(得分:1)

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

当你有这个

时才有意义
var i int
i = 0

所以你可以更简洁,并用

推断出类型
i := 0

但是否则它们完全一样。

答案 3 :(得分:1)

我认为:=主要作为接收函数调用结果的方便语法存在,其中人们经常希望重用现有变量,同时声明一个新变量:

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

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

答案 4 :(得分:0)

x := fn()

将使x与函数fn的返回类型相同。如果您重构代码并且fn的返回类型发生了更改,则x的类型将免费更改。

...而且打字更少。