レッツ・ショー:
package main
import "fmt"
func main() {
a := 100
{
fmt.Println(a) // 100
a, b := 0, 0
fmt.Println(a, b) // 0 0
}
fmt.Println(a) // 100
}
出力:
100
0 0
100
のは、あなたの最初のサンプルを単純化してみましょう、このワーキングサンプルコード(1)を参照してください従ってa
のa, b := 0, 0
はであり、これはであり、このa
は新しい変数である
これは可変スコープとシャドウイングと呼ばれ、
とします。今までのため、このコードのようc
は、それがどのように動作するかを示して(2):
100
0 0
100
とあなたの次のサンプル・コード(3)を簡素化することができます:
package main
import "fmt"
func main() {
a := 100
{
fmt.Println(a) // 100
c, b := 0, 0
fmt.Println(c, b) // 0 0
}
fmt.Println(a) // 100
}
出力は、(1)のように同じです。
package main
import "fmt"
func main() {
a := 0
b := byte(0)
{
fmt.Println(a, b) // 0 0
a, b = 1, byte(1)
fmt.Println(a, b) // 1 1
}
fmt.Println(a, b) // 1 1
}
出力:
0 0
1 1
1 1
ここにa
とb
は同じ内側と外側のループです。 Where can we use Variable Scoping and Shadowing in Go?
をして参照してください:
も見 What is the difference between := and = in Go?
Goは(Javascriptを、たとえば、とは違って)ブロック・スコープを持っています。変数を宣言すると、変数はその周辺ブロックの中で宣言されます。ネストしたブロックを持つことができるので、内側のブロック内の同じ名前の変数を外側に宣言することができます。これはシャドーイングと呼ばれます。 – thwd