gotoの概要
ラベルを使ったジャンプ処理 Goの予約語 | ||
goto 概要 |
||
|
基本的なgotoの使い方
goto
を使うと、指定したラベルへジャンプして処理を継続できます。
package main
import "fmt"
func main() {
fmt.Println("処理開始")
goto Skip // "スキップしました" のラベルへジャンプ
fmt.Println("この行は実行されません")
Skip:
fmt.Println("スキップしました")
}
解説:
goto Skip
を実行すると、Skip:
の位置へジャンプします。- そのため、
fmt.Println("この行は実行されません")
は実行されません。
実行結果:
処理開始 スキップしました
gotoを使ったループの制御
goto
を使って、ループを制御することもできます。
package main
import "fmt"
func main() {
count := 0
Loop:
if count < 5 {
fmt.Println("カウント:", count)
count++
goto Loop // 再びLoopへジャンプ
}
fmt.Println("終了")
}
解説:
goto Loop
を使って、カウントが5になるまで繰り返し実行します。- 通常の
for
ループと同じ動作ですが、goto
を使うことで明示的にジャンプできます。
実行結果:
カウント: 0 カウント: 1 カウント: 2 カウント: 3 カウント: 4 終了
エラーハンドリングでのgotoの利用
エラーが発生したときに、共通の処理へジャンプするのにgoto
を使うことがあります。
package main
import "fmt"
func main() {
var num int
fmt.Print("数値を入力: ")
fmt.Scan(&num)
if num < 0 {
goto Error
}
fmt.Println("入力された数値:", num)
return
Error:
fmt.Println("エラー: 負の数は入力できません")
}
解説:
- 負の数を入力した場合、
goto Error
でエラーメッセージを出力する処理へジャンプします。 - 通常の処理は
return
で終了するため、エラー発生時のみエラーメッセージが表示されます。
実行結果(負の数を入力した場合):
数値を入力: -5 エラー: 負の数は入力できません
注意事項
- gotoを多用すると可読性が低下する: コードが複雑になり、バグの原因になりやすい。
- 関数内のみで使用可能:
goto
は同じ関数内でのみ有効で、関数間のジャンプはできない。 - ラベルを適切に管理する: ラベルの名前を明確にして、意図しない動作を防ぐ。
よくある質問
- Q: gotoは推奨されますか?
- A: 一般的には避けるべきですが、エラーハンドリングや特殊なループ制御には有効な場合があります。
- Q: 他の言語のgotoと同じですか?
- A: 機能は似ていますが、Goの
goto
は関数内でのみ使用可能です。 - Q: gotoを使わずにループを制御する方法は?
- A: 通常は
for
ループやbreak
、continue
を使用します。 - Q: gotoの代わりにreturnを使うべきですか?
- A: はい。エラー処理では
return
を使って早期終了するのが一般的です。
まとめ
goto
を使うと、プログラムの実行を指定したラベルへジャンプできる。- ループの制御やエラーハンドリングで使用されることがある。
- 関数内でのみ使用可能で、適切に使わないと可読性が低下する。
- 通常は
for
やreturn
を使う方が推奨される。