我不太了解短作业的具体目的,
为什么这样做:
x:= 10
当这也是可能的时候:
var x = 10
是否有任何特定用例,其中短分配更方便 感谢
答案 0 :(得分:13)
if x, err := fn(); err != nil {
// do something
}
在上面的例子中,变量被限制在if语句中。如果您尝试在if语句之外访问err
,它将无法使用。同样适用于x
。在这种情况下,保持这样的范围可能会有用,但我会说使用:=
是针对给定的样式,如if
,switch
,for
对于其他一些背景,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
的类型将免费更改。
...而且打字更少。