コンテンツにスキップ

Go/goto

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Go


Goのgotoキーワードについて

[編集]

Goのgotoキーワードは、プログラムの実行フローを特定のラベル位置に無条件に転送するための制御構文です。

Goでは、goto文を使用して、同じ関数内の別の場所にジャンプすることができます。ただし、他の多くの現代的なプログラミング言語と同様に、使用が制限されています。

基本的な構文

[編集]
goto Label
// ...
Label:
    // ここに処理を書く

特徴と制限

[編集]
  1. 同一関数内のみgotoは同じ関数内のラベルにのみジャンプできます。関数をまたいだジャンプはできません。
  2. 変数スコープの制限gotoを使用して変数宣言をスキップすることはできません。
  3. ループの考慮:ループの中から外へジャンプしたり、外からループの中にジャンプしたりする場合は、ループ変数のスコープに注意が必要です。

使用例

[編集]
package main

import "fmt"

func main() {
    i := 0
    
start:
    if i >= 5 {
        goto end
    }
    
    fmt.Println(i)
    i++
    goto start
    
end:
    fmt.Println("終了")
}

この例では、gotoを使ってループを実装しています。通常はfor文を使用する方が適切ですが、例として示しています。

使用に関する注意点

[編集]

gotoは一般的にモダンなプログラミングでは推奨されません。乱用するとコードが「スパゲッティコード」になりやすく、プログラムの流れが追いにくくなります。Goでは以下のような限られた状況で使われることがあります:

  1. 複数のネストされた条件やループからの脱出
  2. エラーハンドリングの一部として、特定のクリーンアップコードに直接ジャンプする場合

多くの場合、breakcontinuereturnなどの他の制御構文や、適切な関数分割によって、より明確なコードを書くことができます。