Go语言的简短声明¶
简短声明为 var 关键字提供了另一种备选语法。
以下两行代码是完全等效的:
var count = 10
count := 10
初看上去,少键入两三个字符似乎不算什么,但小数怕长计,所以简短声明还是要比
var 关键字流行得多。 更重要的是,简短声明还可以用在一些 var
关键字无法使用的地方。
代码清单 4-2 展示了 for
循环的另一种形式,它包含了初始化语句、比较条件语句以及对 count
变量执行减法运算的后置语句。 在使用这种形式的 for
循环时,我们需要依次向循环提供初始化语句、比较条件语句和后置语句。
代码清单 4-2 更简洁的倒数程序: loop.go
var count = 0
for count = 10; count > 0; count-- {
fmt.Println(count)
}
fmt.Println(count) // count 变量仍然处于作用域之内
在不使用简短声明的情况下,count
变量的声明必须放置在循环之外,这意味着 count
变量将在循环结束之后继续存在于作用域。
但是正如代码清单 4-3 所示,在使用简短声明的情况下,count
变量的声明和初始化将成为 for
循环的一部分,并且该变量将在循环结束之后脱离作用域,而尝试在循环之外访问
count 变量将导致 Go 编译器报告 undefined: count 错误。
代码清单 4-3 在 for 循环中使用简短声明: short-loop.go
for count := 10; count > 0; count-- {
fmt.Println(count)
} // 随着循环结束,count 变量将不再处于作用域之内。
Note
为了代码的可读性考虑, 声明变量的位置和使用变量的位置应该尽可能地贴近。
除了 for 循环之外,简短声明还可以在 if 语句里面声明新的变量。
比如代码清单 4-4 中的 num 变量就可以用在 if 语句的所有分支当中。
代码清单 4-4 在 if 语句中使用简短声明: short-if.go
if num := rand.Intn(3); num == 0 {
fmt.Println("Space Adventures")
} else if num == 1 {
fmt.Println("SpaceX")
} else {
fmt.Println("Virgin Galactic")
} // 随着 if 语句结束,num 变量将不再处于作用域之内。
正如代码清单 4-5 所示,跟 if 语言一样,简短声明也可以用在 switch
语句里面。
代码清单 4-5 在 switch 语句中使用简短声明: short-switch.go
switch num := rand.Intn(10); num {
case 0:
fmt.Println("Space Adventures")
case 1:
fmt.Println("SpaceX")
case 2:
fmt.Println("Virgin Galactic")
default:
fmt.Println("Random spaceline #", num)
}
