- Go 教程
- Go - 首頁
- Go - 概述
- Go - 環境搭建
- Go - 程式結構
- Go - 基本語法
- Go - 資料型別
- Go - 變數
- Go - 常量
- Go - 運算子
- Go - 決策語句
- Go - 迴圈語句
- Go - 函式
- Go - 變數作用域
- Go - 字串
- Go - 陣列
- Go - 指標
- Go - 結構體
- Go - 切片
- Go - 範圍
- Go - 對映
- Go - 遞迴
- Go - 型別轉換
- Go - 介面
- Go - 錯誤處理
- Go 有用資源
- Go - 問題與解答
- Go - 快速指南
- Go - 有用資源
- Go - 討論
Go - 變數作用域
在任何程式語言中,作用域是指程式中定義的變數可以存在並被訪問的區域,超出該區域則無法訪問該變數。在 Go 程式語言中,可以在三個地方宣告變數:
在函式或程式碼塊內部(**區域性**變數)
在所有函式外部(**全域性**變數)
在函式引數定義中(**形式**引數)
讓我們瞭解一下什麼是**區域性**和**全域性**變數,以及什麼是**形式**引數。
區域性變數
在函式或程式碼塊內部宣告的變數稱為區域性變數。它們只能被該函式或程式碼塊內部的語句使用。區域性變數對於其自身函式外部的函式是未知的。以下示例使用區域性變數。這裡所有變數 a、b 和 c 都是 main() 函式的區域性變數。
package main
import "fmt"
func main() {
/* local variable declaration */
var a, b, c int
/* actual initialization */
a = 10
b = 20
c = a + b
fmt.Printf ("value of a = %d, b = %d and c = %d\n", a, b, c)
}
編譯並執行上述程式碼時,將產生以下結果:
value of a = 10, b = 20 and c = 30
全域性變數
全域性變數是在函式外部定義的,通常位於程式的頂部。全域性變數在程式的生命週期內保持其值,並且可以在為程式定義的任何函式內部訪問。
任何函式都可以訪問全域性變數。也就是說,全域性變數在其聲明後即可在整個程式中使用。以下示例使用全域性變數和區域性變數:
package main
import "fmt"
/* global variable declaration */
var g int
func main() {
/* local variable declaration */
var a, b int
/* actual initialization */
a = 10
b = 20
g = a + b
fmt.Printf("value of a = %d, b = %d and g = %d\n", a, b, g)
}
編譯並執行上述程式碼時,將產生以下結果:
value of a = 10, b = 20 and g = 30
程式可以為區域性變數和全域性變數使用相同的名稱,但函式內部的區域性變數的值優先。例如:
package main
import "fmt"
/* global variable declaration */
var g int = 20
func main() {
/* local variable declaration */
var g int = 10
fmt.Printf ("value of g = %d\n", g)
}
編譯並執行上述程式碼時,將產生以下結果:
value of g = 10
形式引數
形式引數在函式內部被視為區域性變數,並且優先於全域性變數。例如:
package main
import "fmt"
/* global variable declaration */
var a int = 20;
func main() {
/* local variable declaration in main function */
var a int = 10
var b int = 20
var c int = 0
fmt.Printf("value of a in main() = %d\n", a);
c = sum( a, b);
fmt.Printf("value of c in main() = %d\n", c);
}
/* function to add two integers */
func sum(a, b int) int {
fmt.Printf("value of a in sum() = %d\n", a);
fmt.Printf("value of b in sum() = %d\n", b);
return a + b;
}
編譯並執行上述程式碼時,將產生以下結果:
value of a in main() = 10 value of a in sum() = 10 value of b in sum() = 20 value of c in main() = 30
初始化區域性變數和全域性變數
區域性變數和全域性變數被初始化為其預設值 0;而指標被初始化為 nil。
| 資料型別 | 初始預設值 |
|---|---|
| int | 0 |
| float32 | 0 |
| 指標 | nil |
廣告