goto文は指定したラベルにジャンプします。
Go言語にはtry catch raise のような例外処理構文はサポートされていませんので、goto文を使います。
複数のループ処理から抜き出したい場合、goto文を使います。
エラーの場合
下記のようにエラーが発生した場合、指定なところにジャンプできます。
func funcA() (int, string) { err := nil filename := "" data := ""
err, filename = GetFileName() if err != nil { goto Done }
err, data = ReadFile(filename) if err != nil { goto Done } Done: return err, data }
複数のループ処理から抜き出し
package main
import "fmt"
func main() {
for a:=0; a<5; a++ {
fmt.Println(a)
if a >= 3 {
goto Loop
}
}
Loop:
fmt.Println("test")
}
結果:
0
1
2
3
test
1
2
3
test
breakで多重のforループから抜き出し
package main
import "fmt"
func main() {
Loop:
for j:=0;j<3;j++ {
fmt.Printf("j=%d\n",j)
for a:=0;a<5;a++{
fmt.Printf("a=%d\n",a)
if a>3{
break Loop
}
}
}
}
結果:
j=0
a=0
a=1
a=2
a=3
a=4
a=0
a=1
a=2
a=3
a=4
※loopラベルが存在しない場合、breakは一つforループを終了できます。