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 |