GO語言————5.6 標籤與goto
5.6 標籤與 goto
for、switch 或 select 語句都可以配合標籤(label)形式的識別符號使用,即某一行第一個以冒號(:
)結尾的單詞(gofmt 會將後續程式碼自動移至下一行)。
示例 5.13 for6.go:
(標籤的名稱是大小寫敏感的,為了提升可讀性,一般建議使用全部大寫字母)
package main
import "fmt"
func main() {
LABEL1:
for i := 0; i <= 5; i++ {
for j := 0; j <= 5; j++ {
if j == 4 {
continue LABEL1
}
fmt.Printf("i is: %d, and j is: %d\n", i, j)
}
}
}
本例中,continue 語句指向 LABEL1,當執行到該語句的時候,就會跳轉到 LABEL1 標籤的位置。
您可以看到當 j==4 和 j==5 的時候,沒有任何輸出:標籤的作用物件為外部迴圈,因此 i 會直接變成下一個迴圈的值,而此時 j 的值就被重設為 0,即它的初始值。如果將 continue 改為 break,則不會只退出內層迴圈,而是直接退出外層迴圈了。另外,還可以使用 goto 語句和標籤配合使用來模擬迴圈。
示例 5.14 goto.go:
package main
func main() {
i:=0
HERE:
print(i)
i++
if i==5 {
return
}
goto HERE
}
上面的程式碼會輸出 01234
。
使用逆向的 goto 會很快導致義大利麵條式的程式碼,所以不應當使用而選擇更好的替代方案。
特別注意 使用標籤和 goto 語句是不被鼓勵的:它們會很快導致非常糟糕的程式設計,而且總有更加可讀的替代方案來實現相同的需求。
一個建議使用 goto 語句的示例會在第 15.1 章的 simple_tcp_server.go 中出現:示例中在發生讀取錯誤時,使用 goto 來跳出無限讀取迴圈並關閉相應的客戶端連結。
定義但未使用標籤會導致編譯錯誤:label … defined and not used
。
如果您必須使用 goto,應當只使用正序的標籤(標籤位於 goto 語句之後),但注意標籤和 goto 語句之間不能出現定義新變數的語句,否則會導致編譯失敗。
示例 5.15 goto2.go:
// compile error goto2.go:8: goto TARGET jumps over declaration of b at goto2.go:8
package main
import "fmt"
func main() {
a := 1
goto TARGET // compile error
b := 9
TARGET:
b += a
fmt.Printf("a is %v *** b is %v", a, b)
}
問題 5.3 請描述下面 for 迴圈的輸出:
i := 0
for { //since there are no checks, this is an infinite loop
if i >= 3 { break }
//break out of this for loop when this condition is met
fmt.Println("Value of i is:", i)
i++;
}
fmt.Println("A statement just after for loop.")
for i := 0; i<7 ; i++ {
if i%2 == 0 { continue }
fmt.Println("Odd:", i)
}
相關文章
- Go語言中JSON標籤的用法與技巧GoJSON
- GO語言————4.9、指標Go指標
- go 語言指標學習Go指標
- go語言標準庫 - timeGo
- go語言標準庫 - strconvGo
- go語言標準庫 - regexpGo
- go語言標準庫 - logGo
- go語言與c語言的相互呼叫GoC語言
- Go 語言指標符號 *和&Go指標符號
- Go語言什麼時候該使用指標 與 指標使用分析Go指標
- 【Go 語言入門專欄】Go 語言的起源與發展Go
- GO語言————5.5 Break 與 continueGo
- Go語言————1、初識GO語言Go
- 徹底學會 Go 指標 -- 就要學習 Go 語言Go指標
- go與其他語言有什麼區別?學習go語言怎麼樣Go
- Rust語言與Go語言各自特點概要比較 –thenewstackRustGo
- JavaScript 標籤語句JavaScript
- GO語言————2、GO語言環境安裝Go
- C語言 指標與陣列C語言指標陣列
- C++ goto語句C++Go
- goto語句簡整Go
- Go語言核心36講(Go語言實戰與應用九)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用八)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十二)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用二)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用一)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十七)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用五)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用七)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用四)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十一)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十四)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十五)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十九)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十八)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用二十)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十三)--學習筆記Go筆記
- Go語言核心36講(Go語言實戰與應用十六)--學習筆記Go筆記