Go 的简短声明
source link: http://blog.huangz.me/2019/go-short-var.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Note
本文摘录自即将出版的《Go语言趣学指南》, 请访问 gpwgcn.com 以获取更多相关信息。
简短声明为 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 变量将不再处于作用域之内。
{提示}
为了代码的可读性考虑, 声明变量的位置和使用变量的位置应该尽可能地贴近。
除了 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) }
{速查 4-5}
如果代码清单 4-4 和 4-5 不使用简短声明, 那么 num
变量的作用域将产生何种变化?
{速查 4-2 答案}
因为 if
语句、 switch
语句和 for
语句只能使用业已声明的变量, 所以在不使用简短声明的情况下, 程序只能在 if
等语句的前面声明 num
变量, 从而导致该变量在 if
等语句结束之后仍然存在于作用域。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK