掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Go語言中 goto 語句通過標簽進行代碼間的無條件跳轉(zhuǎn),同時 goto 語句在快速跳出循環(huán)、避免重復退出上也有一定的幫助,使用 goto 語句能簡化一些代碼的實現(xiàn)過程。

創(chuàng)新互聯(lián)建站專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、大英網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5開發(fā)、商城網(wǎng)站定制開發(fā)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為大英等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
下面這段代碼在滿足條件時,需要連續(xù)退出兩層循環(huán),使用傳統(tǒng)的編碼方式如下:
package main
import "fmt"
func main() {
var breakAgain bool
// 外循環(huán)
for x := 0; x < 10; x++ {
// 內(nèi)循環(huán)
for y := 0; y < 10; y++ {
// 滿足某個條件時, 退出循環(huán)
if y == 2 {
// 設(shè)置退出標記
breakAgain = true
// 退出本次循環(huán)
break
}
}
// 根據(jù)標記, 還需要退出一次循環(huán)
if breakAgain {
break
}
}
fmt.Println("done")
}
代碼說明如下:
將上面的代碼使用Go語言的 goto 語句進行優(yōu)化:
package main
import "fmt"
func main() {
for x := 0; x < 10; x++ {
for y := 0; y < 10; y++ {
if y == 2 {
// 跳轉(zhuǎn)到標簽
goto breakHere
}
}
}
// 手動返回, 避免執(zhí)行進入標簽
return
// 標簽
breakHere:
fmt.Println("done")
}
代碼說明如下:
使用 goto 語句后,無須額外的變量就可以快速退出所有的循環(huán)。
多處錯誤處理存在代碼重復時是非常棘手的,例如:
err := firstCheckError()
if err != nil {
fmt.Println(err)
exitProcess()
return
}
err = secondCheckError()
if err != nil {
fmt.Println(err)
exitProcess()
return
}
fmt.Println("done")
代碼說明如下:
在上面代碼中,有一部分都是重復的錯誤處理代碼,如果后期在這些代碼中添加更多的判斷,就需要在這些雷同的代碼中依次修改,極易造成疏忽和錯誤。
使用 goto 語句來實現(xiàn)同樣的邏輯:
err := firstCheckError()
if err != nil {
goto onExit
}
err = secondCheckError()
if err != nil {
goto onExit
}
fmt.Println("done")
return
onExit:
fmt.Println(err)
exitProcess()
代碼說明如下:

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流