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
廣告

© . All rights reserved.