最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Go day 7 (init & scope)

XAMPP下载 admin 768浏览 0评论
 init
init function 可以用來對該程式進行一些初始化的動作.

sumutil.go
透過 init 初始化變數 sum 為 10

package mymath

var sum int

func init() {
sum = 10
}

func GetSum() int {
return sum
}

func Add(num int) int {
sum += num
return sum
}

func Sub(num int) int {
sum -= num
return sum
}
目錄結構 :

goHello
-src
-util
-mymath
sumutil.go
-practice
example.go
example.go
根據上面放置的目錄結構 import sumutil.go 的 package 是 util/mymath

package main

import (
“fmt”
“util/mymath”
)

func main() {
fmt.Println(mymath.GetSum()) // 10
fmt.Println(mymath.Add(10))  // 20
fmt.Println(mymath.Sub(5))   // 15
fmt.Println(mymath.GetSum()) // 15
}

scope
在宣告變數時,也要注意宣告的範圍 (scope) 也就是一個程式文字區域,在 compile 時就會先檢查.
會從最內層的區塊先開始查詢到全域的區塊,如果所有的範圍都找不到的話就會出現 undefined.

package main

import (
“fmt”
)

var x string // 變數 x : 1

func init() {
x = “sam!”
fmt.Println(x)
}

func main() {
x := “daniel!” // 變數 x : 2
for i := 0; i < len(x); i++ {
x := x[i] // 變數 x : 3
if x != ‘!’ {
x := x + ‘A’ – ‘a’ // 變數 x : 4
fmt.Printf(“%c , “, x)
}
fmt.Println(x)
// fmt.Println(y) // undefined: y
}
fmt.Println(x)
}

在上面的範例裡 4 個不同變數 x 都出現在不同的程式區塊裡,
而變數 i 是存在 for 迴圈的隱含區塊裡.

執行結果 :

sam!
D , 100
A , 97
N , 110
I , 105
E , 101
L , 108
33
daniel!
for , if , switch 除了本體的程式區塊之外,還有另外的隱含區塊

package main

import (
“fmt”
)

func retx() int {
return 3
}

func rety() int {
return 5
}

func main() {
if x := retx(); x == 3 {
fmt.Println(x)  //本體程式區塊
} else if y := rety(); x == y { // 隱含區塊
fmt.Println(x, y)
} else {
fmt.Println(x, y)
}
//fmt.Println(x, y) // compiler error undefined: x, y
}

转载请注明:XAMPP中文组官网 » Go day 7 (init & scope)

您必须 登录 才能发表评论!