いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。最近Go言語勉強中。

Goメモ-08 (Functions, 関数, Tour of Go)

概要

Tour of Go の - Functions についてのサンプル。

tour.golang.org

Goでは、関数は第一級のオブジェクトです。

なので、変数にも入れられるし、パラメータとしても渡せるし、戻り値としても使える。

この辺は最近の言語では普通ですね。

Goの関数は、戻り値を複数返すことが出来ます。

Goには、例外の仕組みが意図的に存在しないので、エラーが発生した情報は戻り値で知らせることになります。

なので、通常関数はエラー情報も返すため

func Hoge(引数) (結果, error) {
    ...
}

のように、error 型を返すのが多いですね。

サンプル

package tutorial

import "fmt"

// Functions は、 Tour of Go - Functions (https://tour.golang.org/basics/4) の サンプルです。
func Functions() error {
    // ------------------------------------------------------------
    // 関数は、0個以上の引数を受け取ることができ、0個以上の戻り値を返すことが出来る
    // 関数は、予約語 func を指定して signature を定義する。
    // ------------------------------------------------------------
    oneParamVoidReturn(100)
    fmt.Println(oneParamOneReturn(100))
    fmt.Println(multiParamMultiReturn(100, 200))
    fmt.Println(multiParamMultiReturnWithReturnNames(100, 200))

    var (
        x, y = 100, 200
    )

    swap(&x, &y)
    fmt.Println(x, y)

    return nil
}

// 引数を一つ受け取り、戻り値なしの関数
func oneParamVoidReturn(x int) {
    fmt.Println("oneParamVoidReturn", x)
}

// 引数を一つ受け取り、一つの戻り値を返す関数
func oneParamOneReturn(x int) int {
    return x * x
}

// 複数の引数を受け取り、複数の戻り値を返す関数
func multiParamMultiReturn(x, y int) (int, int, int) {
    return x, y, x + y
}

// 複数の引数を受け取り、複数の戻り値を返す関数だが、戻り値の部分にも予め名前を指定しておくことが出来る
// この場合、予め戻り値は確保されているので、関数を終了する場合 return とのみ記載することが可能
func multiParamMultiReturnWithReturnNames(x, y int) (rx, ry, rsum int) {
    rx = x
    ry = y
    rsum = x + y

    return
}

// 指定された 2つの値 を入れ替え
func swap(x, y *int) {
    *x, *y = *y, *x
}

try-golang/tutorial_gotour_04_functions.go at master · devlights/try-golang · GitHub


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com