package main
import "fmt"
func main() {
x := 10
switch x {
case 0:
y := 'a'
fmt.Printf("%c\n", y)
case 1:
// y = 'b' // this can't compile,
y := 'b'
fmt.Printf("%c\n", y)
default:
y := '-'
fmt.Printf("%c\n", y)
}
}
Run Code Online (Sandbox Code Playgroud)
似乎y每个case都是包含的本地的case,对其他情况不可见。我所知:
{}可以创建本地范围,但没有{}每个case.我在网上查了一下,没有得到明确的定义。我知道我们可以initialization在switch.
问题:
case是 case 本身的局部范围吗?{}每个case.块是匹配大括号内的可能为空的声明和语句序列。
Run Code Online (Sandbox Code Playgroud)Block = "{" StatementList "}" . StatementList = { Statement ";" } .源代码中除了显式块之外,还有隐式块:
- Universe块包含所有 Go 源文本。
- 每个包都有一个包块,其中包含该包的所有 Go 源文本。
- 每个文件都有一个文件块,其中包含该文件中的所有 Go 源文本。
- 每个“if”、“for”和“switch”语句都被视为位于其自己的隐式块中。
- “switch”或“select”语句中的每个子句都充当隐式块。
块嵌套并影响范围。
正如您在规范中看到的:每个子句(例如case)充当隐式块,无需显式使用{}。