Go 的 if 可以先宣告變數且作用域涵蓋 else

if 的判斷式前可以放一句初始化陳述句,用 ; 隔開。該變數的作用域是整條 if-else 鏈,出了鏈就消失。

if v := 10; false {
    // v 在這裡看得到
} else {
    fmt.Println(v)   // 10,else 也看得到
}
// 這裡 v 已經不存在

典型用途是把「取值 + 檢查」綁在一起,讓只服務這個判斷的變數不外洩到函式作用域:

if err := doSomething(); err != nil {
    return err
}

switch 也吃同一套(switch v := f(); v {)。

相關:Go 的 switch 預設不 fallthroughGo 不允許宣告了卻沒用到的變數