变量作用于

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"fmt"
)

//函数外部声明/定义的变量叫全局变量,
//作用域在整个包都有效,如果其首字母为大写,则作用域在整个程序有效
var age int = 50
var Name string = "jack~"

//函数
func test() {
//age 和 Name的作用域就只在test函数内部
age := 10
Name := "tom~"
fmt.Println("age=", age) // 10
fmt.Println("Name=", Name) // tom~
}

func main() {

fmt.Println("age=", age) // 50
fmt.Println("Name=", Name) // jack~
test()

//如果变量是在一个代码块,比如 for / if中,那么这个变量的的作用域就在该代码块

for i := 0; i <= 10; i++ {
fmt.Println("i=", i)
}

var i int //局部变量
for i = 0; i <= 10; i++ {
fmt.Println("i=", i)
}

fmt.Println("i=", i)
}

//变量作用于测试题
var name = "tom" //全局变量
func test01(){
fmt.Println(name)//tom tom
}
func test02(){//编译器采用就近原则
name :="jack"
fmt.Println(name)
}

name := "jack"
fmt.Println(name)//jack
func main(){
fmt.Println(name)//tom
test01()//tom
test02()//jack
test01()//tom
}
//tom tom jack jack

//思考:下面的代码输出声明内容?
var Age int = 20//ok
Name := "tom"// var Name string Name = "tom"
func main(){
fmt.Println("name",Nmae)
}
// 错误的原因:因为 Name := "tom" 等价于 var Nmae = string Name = "tom" 赋值语句,
//不能再函数体外,所以错