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
系列導讀
24. 超詳細解讀 Go Modules 前世今生及入門使用

