php小編魚仔為您介紹switch case語句中變量的范圍問題。在switch case語句中,變量的作用域僅限于當前的case塊內(nèi)部,不會影響到其他case塊。這意味著,即使在不同的case塊中使用相同的變量名,它們也是互相獨立的,不會造成沖突。這種特性使得我們可以在不同的case塊中使用相同的變量名,而不必擔心產(chǎn)生錯誤或沖突。因此,在編寫switch case語句時,我們可以更加靈活地操作變量,提高代碼的可讀性和可維護性。
問題內(nèi)容
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)
}
}
登錄后復制
似乎每個 case 中的 y 都是包含 case 的本地文件,對其他案例不可見。
據(jù)我所知:
{} 可以創(chuàng)建本地范圍,但每個 case 沒有 {}。
Java 不同。
網(wǎng)上查了一下,沒有得到明確的定義。我知道我們可以在 switch 的 initialization 部分聲明 switch 范圍變量。
問題:
-
您能否確認,在 Golang 中,開關(guān)
case 內(nèi)的變量范圍是 case 本身的本地變量?這是不是一個特殊的設(shè)計,上面提到了每個
case都沒有{}。
解決方法
規(guī)范:塊:
正如您在規(guī)范中看到的:每個子句(例如 case)充當隱式塊,無需顯式使用 {}。






