Go言語の関数

関数は、タスクを実行するための基本的なコードブロックです。

Go言語には最低でも main() 関数があります。

関数を使用して機能を分割でき、論理的には各関数が指定されたタスクを実行します。

関数宣言はコンパイラに関数名、戻り値の型、およびパラメータを伝えます。

Go言語の標準ライブラリには、さまざまな組み込み関数が用意されています。例えば、len() 関数は異なる型の引数を受け取り、その型の長さを返します。文字列を渡した場合は文字列の長さを返し、配列を渡した場合は配列に含まれる要素の数を返します。


関数定義

Go言語の関数定義の形式は次のとおりです:

func function_name( [parameter list] ) [return_types] {
   函数体
}

関数定義の説明:

  • func:関数は func で宣言が始まります
  • function_name:関数名。パラメータリストと戻り値の型が関数シグネチャを構成します。
  • parameter list:パラメータリスト。パラメータはプレースホルダーのようなもので、関数が呼び出されるときに値をパラメータに渡すことができます。この値を実引数と呼びます。パラメータリストは、パラメータの型、順序、および数を指定します。パラメータはオプションであり、つまり関数はパラメータを含まないこともできます。
  • return_types:戻り値の型。関数は一連の値を返します。return_types はその値のデータ型です。一部の関数は戻り値を必要としないため、その場合 return_types は必須ではありません。
  • 関数本体:関数定義のコードの集まりです。

実例

以下の実例は max() 関数のコードです。この関数は2つの整数型パラメータ num1 と num2 を受け取り、これら2つのパラメータの最大値を返します:

実例

/* 関数は2つの数値の最大値を返す */
func max(num1, num2 int) int {
   /* ローカル変数の宣言 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

関数呼び出し

関数を作成するとき、関数が何を行うかを定義します。指定されたタスクを実行するには、その関数を呼び出します。

関数を呼び出し、関数にパラメータを渡し、戻り値を返します。例:

実例

package main

import "fmt"

func main() {
   /* ローカル変数の定義 */
   var a int = 100
   var b int = 200
   var ret int

   /* 関数を呼び出して最大値を返す */
   ret = max(a, b)

   fmt.Printf( "最大値は : %d\n", ret )
}

/* 関数は2つの数値の最大値を返す */
func max(num1, num2 int) int {
   /* ローカル変数の定義 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

上記の実例では、main() 関数内で max() 関数を呼び出しており、実行結果は次のとおりです:

最大值是 : 200

関数が複数の値を返す

Goの関数は複数の値を返すことができます。例:

実例

package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Google", "サンプル")
   fmt.Println(a, b)
}

上記の実例の実行結果は次のとおりです:

サンプル Google

関数パラメータ

関数がパラメータを使用する場合、その変数は関数の仮パラメータ(仮引数)と呼ばれます。

仮パラメータは、関数本体内で定義されたローカル変数のようなものです。

関数を呼び出すとき、パラメータを渡す方法は2つあります:

渡し方の種類 説明
値渡し 値渡しとは、関数を呼び出すときに実引数のコピーを関数に渡すことです。この場合、関数内でパラメータを変更しても、実引数には影響しません。
参照渡し 参照渡しとは、関数を呼び出すときに実引数のアドレスを関数に渡すことです。この場合、関数内でパラメータに行った変更は実引数に影響します。

デフォルトでは、Go言語は値渡しを使用します。つまり、呼び出しの過程で実引数に影響を与えません。


関数の使い方

関数の使い方 説明
関数を別の関数の実引数として使用する 関数は定義後、別の関数の実引数として渡すことができます
クロージャ クロージャは匿名関数であり、動的プログラミングで使用できます
メソッド メソッドとは、レシーバーを含む関数です
その他の拡張