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を使う方が推奨される。