天天看點

mysql goto_11. Go 語言流程控制:goto 無條件跳

Hi,大家好,我是明哥。

在自己學習 Golang 的這段時間裡,我寫了詳細的學習筆記放在我的個人微信公衆号 《Go程式設計時光》,對于 Go 語言,我也算是個初學者,是以寫的東西應該會比較适合剛接觸的同學,如果你也是剛學習 Go 語言,不防關注一下,一起學習,一起成長。

我的線上部落格:http://golang.iswbm.com

我的 Github:github.com/iswbm/GolangCodingTime

Go裡的流程控制方法還是挺豐富,整理了下有如下這麼多種:

if - else 條件語句

switch - case 選擇語句

for - range 循環語句

goto 無條件跳轉語句

defer 延遲執行

前面三種,我已經都講過了,今天要講講 goto 的無條件跳轉。

很難想象在 Go 居然會保留 goto,因為很多人不建議使用 goto,是以在一些程式設計語言中甚至直接取消了 goto。

我感覺 Go 既然保留,一定有人家的理由,隻是我目前還沒感受到。不管怎樣,咱還是照常學習吧。

0. 基本模型

goto 顧言思義,是跳轉的意思。

goto 後接一個标簽,這個标簽的意義是告訴 Go程式下一步要執行哪裡的代碼。

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

goto 标簽;

...

...

标簽: 表達式;

1. 最簡單的示例

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

import "fmt"

func main() {

goto flag

fmt.Println("B")

flag:

fmt.Println("A")

}

執行結果,并不會輸出 B ,而隻會輸出 A

A

2. 如何使用?

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

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

import "fmt"

func main() {

i := 1

flag:

if i <= 5 {

fmt.Println(i)

i++

goto flag

}

}

輸出如下

1

2

3

4

5

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

import "fmt"

func main() {

i := 1

for {

if i > 5 {

goto flag

}

fmt.Println(i)

i++

}

flag:

}

輸出如下

1

2

3

4

5

最後再舉個例子,使用 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++

}

}

輸出如下

2

4

6

8

10

3. 注意事項

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

系列導讀

mysql goto_11. Go 語言流程控制:goto 無條件跳

有疑問加站長微信聯系(非本文作者)

mysql goto_11. Go 語言流程控制:goto 無條件跳