xia的小窩

一起來coding和碼字吧

0%

Golang-變數的作用範圍

在 Go 語言中,所有的變數都有其運作範圍 ( 或稱層級、作用域 )。最頂層的廢為是套件 ( package ) 範圍。

從子找上層

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
"fmt"
)

var test = 5

func main() {
fmt.Println("start : ", test)
if true {
fmt.Println("block : ", test)
OU()
}
}

func OU() {
fmt.Println("OU start : ", test)
}

// start : 5
// block : 5
// OU start : 5

變數的遮蔽

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
package main

import (
"fmt"
)

var test = 5

func main() {
fmt.Println("start : ", test)

test := 90
if true {
fmt.Println("block : ", test)
OU()
}
fmt.Println("end : ", test)
}

func OU() {
fmt.Println("OU start : ", test)
}

// start : 5
// block : 90
// OU start : 5
// end : 90

子找子,主找主,作用的範圍有差。

當我們呼叫 OU()的時候,Go語言動用了靜態範圍解析,它不會管是在那裡呼叫的。因此它是套件離別的變數。

子範圍的變數無法在外面取得

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"fmt"
)

func main() {
{
test := 55
fmt.Println(test)
}
// 無法取得上面的變數
fmt.Println(test)
}

// # hello
// .\hello.go:12:14: undefined: test