Go-スコープルール

プログラミングのスコープは、定義された変数が存在でき、それを超えると変数にアクセスできないプログラムの領域です。Goプログラミング言語で変数を宣言できる場所は3つあります-

  • 関数またはブロック内(local 変数)

  • すべての機能の外(global 変数)

  • 関数パラメータの定義では(formal パラメーター)

何であるかを調べましょう local そして global 変数とは何ですか formal パラメーター。

ローカル変数

関数またはブロック内で宣言された変数は、ローカル変数と呼ばれます。それらは、その関数またはコードのブロック内にあるステートメントによってのみ使用できます。ローカル変数は、それ自体の外部の関数には知られていません。次の例では、ローカル変数を使用しています。ここで、すべての変数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