funcの概要
関数の定義と実行 Goの予約語 | ||
func 概要 |
||
|
基本的なfuncの使い方
以下のコードは、引数を1つ受け取り、文字列を出力する関数を定義し、呼び出す例です。
package main
import "fmt"
// 挨拶を表示する関数
func greet(name string) {
fmt.Println("こんにちは、", name, "さん!")
}
func main() {
greet("太郎") // 関数を呼び出す
}
解説:
func greet(name string)
は、文字列型の引数name
を受け取る関数です。fmt.Println
を使って、「こんにちは、〇〇さん!」と出力します。main
関数内でgreet("太郎")
を実行すると、「こんにちは、太郎さん!」と表示されます。
実行結果:
こんにちは、太郎さん!
戻り値を持つ関数
関数は戻り値を持つことができます。以下の例では、2つの整数を加算し、その結果を返します。
package main
import "fmt"
// 2つの整数を加算し、結果を返す関数
func add(a int, b int) int {
return a + b
}
func main() {
result := add(3, 5) // 関数の戻り値を受け取る
fmt.Println("加算結果:", result)
}
解説:
func add(a int, b int) int
は、2つの整数を受け取り、int
型の値を返す関数です。return a + b
で、加算した結果を返します。main
関数内でadd(3, 5)
を呼び出し、結果を変数result
に格納し、出力します。
実行結果:
加算結果: 8
複数の戻り値を持つ関数
Goの関数は複数の戻り値を返すことができます。以下の例では、割り算の結果と余りを返します。
package main
import "fmt"
// 割り算を行い、商と余りを返す関数
func divide(a int, b int) (int, int) {
return a / b, a % b
}
func main() {
quotient, remainder := divide(10, 3)
fmt.Println("商:", quotient, "余り:", remainder)
}
解説:
func divide(a int, b int) (int, int)
は、2つの整数を受け取り、整数の商と余りの2つの値を返します。return a / b, a % b
で、計算した商と余りを返します。main
関数内で、戻り値をそれぞれquotient
とremainder
に代入して出力します。
実行結果:
商: 3 余り: 1
注意事項
- 関数名は小文字から始めるとパッケージ外からアクセスできない: Goでは、大文字で始まる関数は公開され、小文字で始まる関数はパッケージ内のみで使えます。
- 戻り値が複数ある場合、不要な値はアンダースコア(_)で無視できる: 例えば、
_, remainder := divide(10, 3)
とすれば、余りだけを受け取れます。 - 再帰関数を使う際は無限ループに注意: 条件を適切に設定しないと、無限ループになり実行が停止しなくなる可能性があります。
よくある質問
- Q: funcは必ず必要ですか?
- A: はい。Goでは関数を定義する際に
func
キーワードが必須です。 - Q: Goの関数は必ず戻り値を持たなければなりませんか?
- A: いいえ。戻り値を持たない関数も定義可能です。
- Q: 引数がない関数はどのように定義しますか?
- A: 引数なしの関数は
func myFunc()
のように定義します。 - Q: 可変長引数を受け取る関数はどう書きますか?
- A: 可変長引数は
func sum(nums ...int)
のように書きます。 - Q: 関数の実行順序はどのように決まりますか?
- A:
main
関数から実行され、呼び出された順に処理されます。
まとめ
func
はGoで関数を定義するためのキーワード。- 関数は引数と戻り値を持つことができ、複数の戻り値を返すことも可能。
- 可変長引数を受け取ることができる。
- 関数を適切に使うことで、コードの再利用性と可読性が向上する。