#9 Goで学ぶ関数の基本

Goの関数には、複数の値を同時に返せるという、他の言語にはあまり見られない特徴があります。この記事では、Goにおける関数の基本と、実務でよく使う書き方を解説します。

関数を作ってみる

Goではfuncというキーワードを使います。

func greet(name string) {
    fmt.Println("こんにちは、" + name + "さん")
}

値を返す関数

func add(a int, b int) int {
    return a + b
}

result := add(3, 5)
fmt.Println(result) // 8

引数の型が同じ場合、a int, b intはa, b intとまとめて書くこともできます。

複数の値を返す

Goの関数は、複数の戻り値をまとめて返せます。

func divide(a int, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("0では割れません")
    }
    return a / b, nil
}

result, err := divide(10, 2)
if err != nil {
    fmt.Println("エラー:", err)
} else {
    fmt.Println(result) // 5
}

この仕組みは、計算結果と「エラーが起きたかどうか」を同時に返したい場面でよく使われます。

戻り値に名前を付ける

Goでは、戻り値にあらかじめ名前を付けておく「名前付き戻り値」という書き方もできます。

func divide(a int, b int) (result int, err error) {
    if b == 0 {
        err = fmt.Errorf("0では割れません")
        return
    }
    result = a / b
    return
}

関数の中でresult・errという変数名がそのまま使え、最後にreturnとだけ書けばそれらの値が返されます。何を返す関数なのかが名前で分かりやすくなる一方、多用すると逆に読みにくくなることもあるため、戻り値の意味を明確にしたい場面で使うとよいでしょう。

Goならではの注意点

Goには、他の言語のような「例外」という仕組みがなく、代わりにこの「エラーを戻り値として返す」書き方が広く使われます。関数を呼び出した後は、必ずエラーが返ってきていないかを確認する、という書き方の癖がGoらしい特徴です。if err != nilのチェックが続くコードは冗長に見えるかもしれませんが、エラー処理を見落としにくくする、Go特有の設計思想だと理解しておくとよいでしょう。

まとめ

Goの関数はfuncで定義し、複数の値を同時に返せるのが特徴です。エラーを戻り値として扱う考え方や、名前付き戻り値の書き方にも慣れておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Goをもっと学びたい方には「Go言語入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本