搜尋
首頁後端開發Golanggo語言中goto怎麼用

go語言中goto怎麼用

Nov 23, 2022 pm 06:40 PM
go語言goto

在go語言中,goto語句用於無條件跳轉,可以無條件地轉移到程式中指定的行;它透過標籤進行程式碼間的無條件跳轉。 goto後面接著一個標籤,這個標籤的意義是告訴Go程式下一步要執行哪行的程式碼,語法「goto 標籤;... ...標籤: 表達式;」。 goto打破原有程式碼執行順序,直接跳到指定行執行程式碼;goto語句通常與條件語句配合使用,可用來實現條件轉移、構成迴圈、跳出迴圈體等功能。

go語言中goto怎麼用

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

go語言中的goto語句

#goto 顧言思義,是跳躍的意思。

Go 語言的goto 語句可以無條件地轉移到程式中指定的行,透過標籤進行程式碼間的無條件跳轉,同時goto 語句在快速跳出迴圈、避免重複退出上也有一定的幫助,使用goto 語句能簡化一些程式碼的實作過程。

goto語句的語法

goto 後面接著一個標籤,這個標籤的意義是告訴 Go程式下一步要執行哪行的程式碼。

所以這個標籤如何放置,放置在哪裡,是 goto 裡最需要注意的。

goto 标签;
...
...
标签: 表达式;

goto 語句流程圖如下:

go語言中goto怎麼用

#goto語句的使用

  • goto 可以打破原有程式碼執行順序,直接跳到某一行執行程式碼。

import "fmt"

func main() {

    goto flag
    fmt.Println("B")
flag:
    fmt.Println("A")

}

執行結果,不會輸出 B ,只會輸出 A

A
  • goto 語句通常會與條件語句搭配使用。可用來實現條件轉移, 構成循環,跳出循環體等功能。

這邊舉個例子,用 goto 的方式實現一個印出 1到5 的循環。

import "fmt"

func main() {
    i := 1
flag:
    if i <= 5 {
        fmt.Println(i)
        i++
        goto flag
    }
}

輸出如下

go語言中goto怎麼用

再舉個例子,使用 goto 實作 類型 break 的效果。

import "fmt"

func main() {
    i := 1
    for {
        if i > 5 {
            goto flag
        }
        fmt.Println(i)
        i++
    }
flag:
}

輸出如下

go語言中goto怎麼用

最後再舉個例子,使用 goto 實作 型別 continue的效果,印出 1到10 的所有偶數。

import "fmt"

func main() {
    i := 1
flag:
    for i <= 10 {
        if i%2 == 1 {
            i++
            goto flag
        }
        fmt.Println(i)
        i++
    }
}

輸出如下

go語言中goto怎麼用

#使用goto 退出多層迴圈

下面這段程式碼在滿足條件時,需要連續退出兩層循環,使用傳統的編碼方式如下:

package main
import "fmt"
func main() {
    var breakAgain bool
    // 外循环
    for x := 0; x < 10; x++ {
        // 内循环
        for y := 0; y < 10; y++ {
            // 满足某个条件时, 退出循环
            if y == 2 {
                // 设置退出标记
                breakAgain = true
                // 退出本次循环
                break
            }
        }
        // 根据标记, 还需要退出一次循环
        if breakAgain {
                break
        }
    }
    fmt.Println("done")
}

程式碼說明如下:

  • 第10 行,建構外循環。

  • 第 13 行,建構內循環。

  • 第 16 行,當 y==2 時需要退出所有的 for 迴圈。

  • 第 19 行,預設循環只能一層一層退出,為此需要設定一個狀態變數 breakAgain,需要退出時,設定這個變數為 true。

  • 第 22 行,使用 break 退出目前循環,執行後,程式碼調轉到第 28 行。

  • 第 28 行,退出一層循環後,根據 breakAgain 變數判斷是否需要再次退出外層循環。

  • 第 34 行,退出所有循環後,列印 done。

將上面的程式碼使用Go語言的goto 語句進行最佳化:

package main
import "fmt"
func main() {
    for x := 0; x < 10; x++ {
        for y := 0; y < 10; y++ {
            if y == 2 {
                // 跳转到标签
                goto breakHere
            }
        }
    }
    // 手动返回, 避免执行进入标签
    return
    // 标签
breakHere:
    fmt.Println("done")
}

程式碼說明如下:

  • 第13行,使用goto 語句跳到所指明的標籤處,標籤在第23 行定義。

  • 第20 行,標籤只能被goto 使用,但不影響程式碼執行流程,此處如果不手動返回,在不滿足條件時,也會執行第24 行程式碼。

  • 第 23 行,定義 breakHere 標籤。

使用 goto 語句後,無須額外的變數就可以快速退出所有的迴圈。

使用goto 集中處理錯誤

多處錯誤處理存在程式碼重複時是非常棘手的,例如:

err := firstCheckError()
if err != nil {
    fmt.Println(err)
    exitProcess()
    return
}
err = secondCheckError()
if err != nil {
    fmt.Println(err)
    exitProcess()
    return
}
fmt.Println("done")

程式碼說明如下:

  • 第1 行,執行某邏輯,回傳錯誤。

  • 第 2~6 行,如果發生錯誤,列印錯誤退出進程。

  • 第 8 行,執行某邏輯,回傳錯誤。

  • 第 10~14 行,發生錯誤後退出流程。

  • 第 16 行,沒有任何錯誤,列印完成。

在上面程式碼中,有一部分都是重複的錯誤處理程式碼,如果後期在這些程式碼中加入更多的判斷,就需要在這些雷同的程式碼中依序修改,極易造成疏忽和錯誤。

使用 goto 语句来实现同样的逻辑:

    err := firstCheckError()
    if err != nil {
        goto onExit
    }
    err = secondCheckError()
    if err != nil {
        goto onExit
    }
    fmt.Println("done")
    return
onExit:
    fmt.Println(err)
    exitProcess()

代码说明如下:

  • 第 3 行和第 9 行,发生错误时,跳转错误标签 onExit。

  • 第 17 行和第 18 行,汇总所有流程进行错误打印并退出进程。

注意事项

goto语句与标签之间不能有变量声明,否则编译错误。

import "fmt"

func main() {
    fmt.Println("start")
    goto flag
    var say = "hello oldboy"
    fmt.Println(say)
flag:
    fmt.Println("end")
}

编译错误

.\main.go:7:7: goto flag jumps over declaration of say at .\main.go:8:6

【相关推荐:Go视频教程

以上是go語言中goto怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Golang vs. Python:利弊Golang vs. Python:利弊Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Golang和C:並發與原始速度Golang和C:並發與原始速度Apr 21, 2025 am 12:16 AM

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

為什麼要使用Golang?解釋的好處和優勢為什麼要使用Golang?解釋的好處和優勢Apr 21, 2025 am 12:15 AM

選擇Golang的原因包括:1)高並發性能,2)靜態類型系統,3)垃圾回收機制,4)豐富的標準庫和生態系統,這些特性使其成為開發高效、可靠軟件的理想選擇。

Golang vs.C:性能和速度比較Golang vs.C:性能和速度比較Apr 21, 2025 am 12:13 AM

Golang適合快速開發和並發場景,C 適用於需要極致性能和低級控制的場景。 1)Golang通過垃圾回收和並發機制提升性能,適合高並發Web服務開發。 2)C 通過手動內存管理和編譯器優化達到極致性能,適用於嵌入式系統開發。

golang比C快嗎?探索極限golang比C快嗎?探索極限Apr 20, 2025 am 12:19 AM

Golang在編譯時間和並發處理上表現更好,而C 在運行速度和內存管理上更具優勢。 1.Golang編譯速度快,適合快速開發。 2.C 運行速度快,適合性能關鍵應用。 3.Golang並發處理簡單高效,適用於並發編程。 4.C 手動內存管理提供更高性能,但增加開發複雜度。

Golang:從Web服務到系統編程Golang:從Web服務到系統編程Apr 20, 2025 am 12:18 AM

Golang在Web服務和系統編程中的應用主要體現在其簡潔、高效和並發性上。 1)在Web服務中,Golang通過強大的HTTP庫和並發處理能力,支持創建高性能的Web應用和API。 2)在系統編程中,Golang利用接近硬件的特性和對C語言的兼容性,適用於操作系統開發和嵌入式系統。

Golang vs.C:基準和現實世界的表演Golang vs.C:基準和現實世界的表演Apr 20, 2025 am 12:18 AM

Golang和C 在性能對比中各有優劣:1.Golang適合高並發和快速開發,但垃圾回收可能影響性能;2.C 提供更高性能和硬件控制,但開發複雜度高。選擇時需綜合考慮項目需求和團隊技能。

Golang vs. Python:比較分析Golang vs. Python:比較分析Apr 20, 2025 am 12:17 AM

Golang适合高性能和并发编程场景,Python适合快速开发和数据处理。1.Golang强调简洁和高效,适用于后端服务和微服务。2.Python以简洁语法和丰富库著称,适用于数据科学和机器学习。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境