本文へスキップ
BecomeCoder

Goコース · 第4章 関数とエラー処理 · レッスン14

複数の戻り値

ブラウザで完結

導入

Go の関数値を2つ以上まとめて返せます。「商とあまり」「結果とエラー」のように、関係する値を一度に返すのに便利です。

説明

package main

import "fmt"

// 商とあまりの2つを返す
func divmod(a, b int) (int, int) {
    return a / b, a % b
}

func main() {
    q, r := divmod(17, 5)
    fmt.Printf("商 %d あまり %d\n", q, r) // 商 3 あまり 2
}
  • func divmod(a, b int) (int, int) … 戻り値の型をカッコで囲んで2つ書きます。
  • 呼び出し側は q, r := ... と2つの変数で受け取ります。
  • 片方が不要なら _ で捨てます:q, _ := divmod(17, 5)

この「複数の値を返す」仕組みが、Go のエラー処理(次のレッスン)の土台になります。

やってみよう

q, r := divmod(17, 5) の受け取りを1つ(q := divmod(17, 5))にするとエラーになります。関数が返す個数と、受け取る変数の個数は一致させる必要があります。

実際に動かしてみよう

下のエディタにGoを書いて「実行」を押すと、学習用シミュレータが fmt の出力を表示します(本物のGoコンパイラではなく、教材の範囲を再現した軽量エンジンです)。スライス・マップ・構造体・インターフェース・goroutine/channel なども動きます。本文の例を書き換えて動かしてみましょう(並行処理の実行順は決定的に再現しているため、本物のインターリーブとは異なる場合があります)。

Go — ブラウザ内で実行(学習用シミュレータ)

Goの教材サブセットを動かす学習用シミュレータを読み込みます(本物のGoコンパイラではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。