目次へ

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()

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp