関数の基本的な使い方について。
基本の関数
ベーシックな関数の例です。
// 基本の関数
func sample01(msg string) string {
return msg + ":返答"
}
呼び出し方は以下の通りです。
func main() {
fmt.Println(sample01("こんにちは")) // "こんにちは:返答" と表示されます。
}
引数が複数
引数が複数必要な場合、引数をカンマ区切りで指定します。
// 引数が複数
func sample02(arg1 int, arg2 int) int {
return arg1 + arg2
}
同じ型の場合、省略出来ます。
// 引数が複数 引数型タイプ省略
func sample02(arg1, arg2 int) int {
return arg1 + arg2
}
複数の戻り値
// 戻り値が複数
func sample03(arg1, arg2 int) (int, error) {
if arg1 == 0 {
return 0, errors.New("0を指定しないで下さい。")
}
return arg1 / arg2, nil
}
ポイント
- 戻り値の型をカンマ区切りで指定する
- 全ての戻り値を返却する
実行パターン
通常
多重代入で複数の戻り値を受け取ります。
func main() {
r, err := sample03(3, 3)
if err == nil {
fmt.Println(err)
}
fmt.Println(r) // 1 が表示される。
}
エラー
Goでは関数やメソットが呼び出し元へエラーを知らせるには、戻り値にエラーを返却します。例外を発生させるような事はできないようです。
以下は、エラーを返却する時の例になります。エラーの戻り値は最後に返すようにするのがお決まりのようです。
func main() {
r, err := sample03(0, 3)
if err == nil {
fmt.Println(err) // "0を指定しないで下さい。" が表示される。
}
}
戻り値の無視
Goは変数を使用しないとコンパイルエラーになります。にもかかわらず、ある変数から必要のない戻り値を受け取った場合困ります。
このように戻り値を使用する必要がない場合、_ (アンダースコア) で戻り値を無視できます。
func main() {
r, _ := sample03(6, 3)
fmt.Println(r) // 2 が表示される。
}