9. 関数
Go言語の関数の特徴として、復数の戻り値を持つ関数や名前付き戻り値を持つ関数があります。
いくつかの種類の関数例をご紹介します。
9.1 関数
一般的な関数
func 関数名(変数名 型, 変数名 型) 型 { // 処理内容 } // 例 func add(x int, y int) int { return x + y }
戻り値を持たない関数
func 関数名(変数名 型, 変数名 型) { // 処理内容 } func hello(s string) { fmt.Println(s) }
復数の戻り値を持つ関数
func 関数名(変数名 型, 変数名 型) (型, 型) { // 処理内容 } func swap(x, y string) (string, string) { return y, x }
名前付き戻り値を持つ関数
戻り値に名前をつけることができます。
こうすることで return と書くだけで、戻り値の変数の値が返ります。
func 関数名(変数名 型, 変数名 型) (変数名 型, 変数名 型) { // 処理内容 } // 例 func split(sum int) (x int, y int) { x = sum * 4 / 9 y = sum - x return }
可変長引数を持つ関数
引数の型の前に … をつけるとその変数は可変長引数となります。
可変長引数の変数はスライスとして扱うことができます。
func 関数名(変数名 型) 型{ // 処理内容 } // 例 func sum(values ...int) int { s := 0 for v := range values { s += v } return s }
9.2 メソッド
メソッドはレシーバを持つ関数です。関数名の前に、レシーバと呼ばれる変数名と型を設定します。
メソッドはレシーバの型に紐付けられます。
func (変数名 型) 関数名(変数名 型) 型 { // 処理内容 } // 例 type Point struct { x float64 y float64 } func (p *Point) Length() float64 { return math.Sqrt(p.x * p.x + p.y * p.y) } func (p *Point) Scale(factor float64) { p.x *= factor p.y *= factor }
また、メソッドの呼び出しは以下のように行います。
p := &Point{x: 2.0, y: 3.0} // メソッドの呼び出し p.Length()