1. if
, else if
, else
语句
if
和 else
块各自有自己的作用域。在 if
或 else if
块中声明的变量在对应的块内是有效的。
package main
func main() {
if a := 1; a == 1 {
fmt.Println("a is 1")
}
// fmt.Println(a) // 这里访问 a 会导致编译错误
}
package main
func main() {
if a := 1; a != 1 {
fmt.Println("a is not 1")
} else {
fmt.Println(a) // 这里访问 a 不会导致编译错误
}
}
2. for
语句
在 for
循环中声明的变量作用域仅限于循环体内。
package main
func main() {
for i := 0; i < 3; i++ {
fmt.Println(i)
}
// fmt.Println(i) // 这里访问 i 会导致编译错误
}
3. switch
语句
在 switch
和每个 case
块中声明的变量作用域是相互独立的。
package main
func main() {
switch n := 1; n {
case 1:
var x = 1
fmt.Println(x) // 输出 1
case 2:
// fmt.Println(x) // 这里访问 x 会导致编译错误
}
}