0Pricing
Go Academy · レッスン

複数の戻り値

タプルの返却とエラーパターン

「複数の戻り値」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

複数の戻り値が必要な理由

Goの関数は複数の値を返せるため、出力引数や例外が不要になります。最も一般的なパターンは、結果とエラーを返すことです。

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

複数の戻り値の処理

呼び出し側は、すべての戻り値をタプルとして受け取ります。不要な値を破棄するには_を使用します。

result, err := divide(10, 3)
if err != nil {
    log.Fatal(err)
}
fmt.Println(result)

value, _ := divide(8, 2) // discard error

名前付き戻り値

戻り値には名前を付けられます。名前付き戻り値は、関数内の変数として扱われます。

func minMax(nums []int) (min, max int) {
    min, max = nums[0], nums[0]
    for _, n := range nums[1:] {
        if n < min { min = n }
        if n > max { max = n }
    }
    return // naked return
}

裸の return

引数なしの return は、名前付き戻り値の変数を返します。名前だけで内容が明確になる短い関数でのみ、控えめに使用してください。

  • 短い関数:使用しても問題ありません
  • 長い関数:可読性を損なうため、明示的な return を優先してください

(value, error) パターン

Go における標準的なエラーハンドリングのパターンです。

func readConfig(path string) (Config, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return Config{}, fmt.Errorf("read config: %w", err)
    }
    var cfg Config
    return cfg, json.Unmarshal(data, &cfg)
}

エラーを決して無視しない

_ でエラーを無視するのは危険です。ベストプラクティスは次のとおりです。

  • そうしない明確な理由がない限り、すべてのエラーを確認してください
  • fmt.Errorf("op: %w", err) を使って、コンテキストを付けてエラーをラップしてください
  • log.Fatal や panic はプログラムの境界でのみ使用し、ライブラリの深い層では使用しないでください

3値を返す関数

関数によっては3つの値を返すこともありますが、これはあまり一般的ではありません。

func parseIPPort(s string) (ip string, port int, err error) {
    // ... parsing logic
    return
}

構造体と複数の戻り値

構造体と複数の値のどちらを返すかは、次のように判断します。

  • 強く関連する2~3個の値:複数の戻り値で問題ありません
  • 4個以上の値、またはオプションのフィールド:構造体を使用してください
  • (value, error) パターン:常に複数の戻り値を使用します

既存の変数への代入

呼び出しの外ですでに宣言されている変数に代入する場合は、:= ではなく = を使用してください。

var cfg Config
var err error
cfg, err = loadConfig()
if err != nil { ... }

メソッドチェーンでの複数の戻り値

Go では、複数の戻り値に対して直接メソッドチェーンを使用することはできません(Rust の Result.map とは異なります)。中間変数を使用して、各ステップでエラーを処理してください。

data, err := fetchData(url)
if err != nil { return err }
parsed, err := parseData(data)
if err != nil { return err }
return save(parsed)

簡単な確認

Go の裸の return は何をしますか。

まとめ:複数の戻り値

複数の戻り値は、Go の中核的なイディオムです。

  • 関数は、括弧で囲んだリストで複数の値を返せます
  • (value, error) パターンは至るところで使われるため、常にエラーを確認してください
  • 名前付き戻り値の変数によって裸の return を使用できます(控えめに使用してください)
  • 不要な値を破棄するには _ を使用してください
  • より整理された API のために、出力引数より複数の戻り値を優先してください

次は、可変長引数関数です。

よくある質問

「複数の戻り値」レッスンは無料ですか?

はい。「複数の戻り値」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「複数の戻り値」で何を学びますか?

タプルの返却とエラーパターン ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「複数の戻り値」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 関数の基本とシグネチャ
  2. 複数の戻り値
  3. 可変長引数関数
  4. defer、無名関数、クロージャ
← Go Academyに戻る