複数の戻り値
タプルの返却とエラーパターン
「複数の戻り値」は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フィードバックを取得できます。ローカル設定は不要です。