bam6o0の記憶域

忘備録になればいいな

Go言語の勉強記録11bit

関数

  • 特徴は戻り値として複数の値を返せる。

関数の宣言

  • 書式
func 関数名(パラメータリスト) 戻り値の型{
  //処理

  //呼び出し元への復帰
  return 戻り値
}
  • パラメータリストには変数名と型の順に,で区切って列挙
  • 戻り値なければ省略可能

実行結果

$go run function.go
3
  • cに慣れているとパラメータリスト後の戻り値の型を忘れがち
  • main関数はパラメータおよび戻り値を持たない決まり。

多値を返す関数の宣言

  • 戻り値の型のリストを()で囲む
  • 書式
func 関数名(パラメータリスト) (戻り値の型リスト){
  //処理
}

実行結果

$go run multi.go
3 -1 2 0.5

関数から返された多値を直接他の関数に渡す。

  • 関数から返された戻り値の数と型が他の関数のパラメータの数と型と一致しているとき、戻り値を関数のパラメータとして直接渡せる。
  • 戻り値とパラメータの数が完全に一致している必要はない。
  • 型は戻り値の型がパラメータの型へ代入可能であれば完全に一致している必要はない。

実行結果

$go run multi_param.go
0 xyz 3.14

可変長パラメータ

  • 関数の最終パラメータは可変長パラメータとして利用可能
  • 可変長パラメータは関数を呼び出す側で、そのパラメータに渡す値の数を自由に決められる。
  • 関数宣言のパラメータの型の前に...を記述する。
  • 可変長パラメータを受け取る関するでは、この可変長パラメータの値をスライスとして受けとる。

実行結果

$go run variadic.go
1月の祝日は2日あります。
元旦
成人の日
2月の祝日は1日あります。
建国記念日
3月の祝日は1日あります。
春分の日

戻り値に名前を付ける

  • Goは戻り値に名前を付けられる。
  • 呼び出し元に返したい値をその変数に代入し、retrun文をパラメータなしで実行すると、retrun文にパラメータを与えたのと同じように戻り値を返せる。
  • 名前付き戻り値の初期値はゼロ値

実行結果

$go run return.go
3 -1 -1 0.5

関数リテラル

  • 名前を持たない関数、匿名関数
  • 関数内で記述する
  • 関数リテラルは関数リテラルの外側で宣言された変数にアクセス可能
  • 一般的にクロージャと呼ぶ
  • 名前がないため記述と呼び出しを同時に行うか、変数に代入して呼び出す
  • 書式
func(パラメータリスト)戻り値の型{
  //処理
  //呼び出し元への復帰
  return 戻り値
}

実行結果

$go run function_literal.go
1230

関数型

  • 関数を変数に格納する時、関数型を使用する。
  • その変数を使って格納されている関数を呼び出せる。
  • 初期化されていない関数型の初期値はnil
  • 書式
func (パラメータリスト)
func (パラメータリスト) 戻り値の型
func (パラメータリスト) (戻り値の型リスト)

実行結果

$go run function_type.go
3
2

init関数

  • 宣言しておくとmain関数より前に自動的に呼び出される
  • 初期設定処理を記述する。
  • パラメータも戻り値も持たない。
  • 1つのソースファイル内で複数のinit関数を記述できる。

実行結果

 $go run init.go
初期設定処理
main関数