#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿