
本文原文:http://golang.iswbm.com
Github:https://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 flagfmt.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 := 1for {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 flagvar 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
好了,今天的文章就到這里了。
若今天的分享對你有幫助,不如點個贊,支持一下?