Go语言趣学指南-lesson4
作者:互联网
变量作用域
本章学习目标
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变量不在处于作用域中
- era变量位于包作用域中,它对整个包都是可见的
- 包作用域在声明时不能用简短声明
标签:count,变量,lesson4,作用域,趣学,month,era,Go,day 来源: https://www.cnblogs.com/walker1024/p/14153154.html