本章学习目标
1、知悉变量作用域的好处
2、学会更简洁的方法声明变量
3、了解for、if和switch是如何和变量作用域交互的
4、学会如何控制作用域的范围
在程序运行过程中,很多变量都会在很短暂的使用后被丢弃,这就是作用域的作用。
当变量被声明后,它就进入了作用域(变量就变得可见了)
变量声明的位置,决定了它的作用域
作用域的好处?
在Go里面,作用域的范围是{}之间的部分
例子(4.1)
package main
import (
"fmt"
"math/rand"
)
func main() {
var count = 0 //count变量在function作用域里
for count < 10 {
var num = rand.Intn(10) + 1 //num变量在for作用域里
fmt.Println(num)
count++
}
}
执行结果:
2
8
8
10
2
9
6
1
7
1
简单声明为var关键字提供了另一种备选语法,
var count = 10 和count := 10 等价,简短声明还能用在一些无法使用var关键字的地方
例子(4.2)
package main
import (
"fmt"
)
func main() {
var count = 0
for count := 10; count > 0; count-- {
fmt.Println(count) //随着循环结束这个count变量会释放掉
}
fmt.Println(count) //count变量仍在function作用域中
}
执行结果:
10
9
8
7
6
5
4
3
2
1
0
例子(4.3)
package main
import (
"fmt"
"math/rand"
)
var era = "AD" //era变量在整个包都是可用的
func main() {
year := 2018 //era、year变量都处于作用域之内
switch month := rand.Intn(12) + 1; month { //era、year、month变量都处于作用域之内
case 2:
day := rand.Intn(28) + 1 //era、year、month、day变量都处于作用域之内
fmt.Println(era, year, month, day)
case 4, 6, 9, 11:
day := rand.Intn(30) + 1 //era、year、month变量都处于作用域之内,这个day变量和第一个day变量不在同一个作用域
fmt.Println(era, year, month, day)
default:
day := rand.Intn(31) + 1 //era、year、month变量都处于作用域之内,这个day变量和第一个day变量不在同一个作用域
fmt.Println(era, year, month, day)
} //month 和day变量不在处于作用域中
} // year变量不在处于作用域中
原文:https://www.cnblogs.com/walker1024/p/14153154.html