クラッシュコースパートVI:ブロック、スコープとシャドーイング



ブロック
GOでは、ブロックは{}のセットで定義されます.通常、関数を作成するときは、既にブロック内にあります.しかし、我々はかなりどこでもブロックを定義することができます.
i := 10
{
    i := 5
    fmt.Println(i) // i is 5
}
fmt.Println(i) // i is 10

スコープ
スコープは特定の変数が定義される場所を定義します.スコープはブロックスコープ、関数スコープ、またはパッケージスコープを指定できます.それぞれのスコープは前のものを含んでいます.パッケージスコープ変数は関数とブロックに利用できますが、他の方法では使用できません.
x := 10
var z int // z declared here
{
    fmt.Println(x) // this is fine
    y := 15
    z = 20 // defined here 
}
fmt.Println(y) // this is not fine
fmt.Println(z) // this is fine

遮光
外側のスコープで定義されている任意の変数をシャドウできます.
x := 10
{
    x := 15
    {
        x := 20
        fmt.Println(x) // 20
    }
    fmt.Println(x) // 15
}
fmt.Println(x) // 10
ちょうどレベルシャドーイングをブロックすることは珍しいです.これにはまれなユースケースがあります.しかし、私はブロックレベルのシャドウイングやブロックのためにさえ、本当に良い使用ケースを見つけませんでした.

次の手順
これは、このGOクラッシュコースシリーズのパート6です.