Go 速習チュートリアル

Go 言語の関数の戻り値

1. 戻り値 (Return Values)

関数から値を返したい場合は、戻り値のデータ型intstring など)を定義し、関数内部で return キーワードを使用する必要があります。

1.1. シンタックス

func FunctionName(param1 type, param2 type) type {
  // 実行されるコード
  return output
}

1.2. 戻り値の実装例

以下の例では、myFunction() が2つの整数(xy)を受け取り、その和(x + y)を整数型(int)として返しています。

package main
import ("fmt")

func myFunction(x int, y int) int {
  return x + y
}

func main() {
  fmt.Println(myFunction(1, 2))
}

実行結果:

3

2. 名前付き戻り値 (Named Return Values)

Go言語では、戻り値に変数を割り当てて名前を付けることができます。

2.1. ネイキッドリターンの実装

以下の例では、戻り値を resultint 型)として定義しています。この場合、return ステートメントに変数名を明示しない「ネイキッドリターン(Naked Return)」が可能です。

package main
import ("fmt")

func myFunction(x int, y int) (result int) {
  result = x + y
  return // 変数名を指定せずに戻す
}

func main() {
  fmt.Println(myFunction(1, 2))
}

もちろん、以下のように return ステートメントで変数名を明示的に指定して記述することも可能です。

package main
import ("fmt")

func myFunction(x int, y int) (result int) {
  result = x + y
  return result
}

func main() {
  fmt.Println(myFunction(1, 2))
}

3. 戻り値を変数に格納する

関数の戻り値は、次のように変数に格納して再利用できます。

3.1. 実装例

ここでは戻り値を total という変数に格納しています。

package main
import ("fmt")

func myFunction(x int, y int) (result int) {
  result = x + y
  return
}

func main() {
  total := myFunction(1, 2)
  fmt.Println(total)
}

4. 複数の戻り値

Go言語の関数は、複数の値を同時に返すことができます。これはエラーハンドリングなどにおいて非常に強力な機能です。

4.1. 実装例

以下の myFunction() は、1つの整数(result)と1つの文字列(txt1)を返します。

package main
import ("fmt")

func myFunction(x int, y string) (result int, txt1 string) {
  result = x + x
  txt1 = y + " ワールド!"
  return
}

func main() {
  fmt.Println(myFunction(5, "ハロー"))
}

実行結果:

10 ハロー ワールド!

4.2. 複数の変数への格納

2つの戻り値をそれぞれ変数(ab)に格納する例です。

package main
import ("fmt")

func myFunction(x int, y string) (result int, txt1 string) {
  result = x + x
  txt1 = y + " ワールド!"
  return
}

func main() {
  a, b := myFunction(5, "ハロー")
  fmt.Println(a, b)
}

5. ブランク識別子 (_) による戻り値の省略

何らかの理由で特定の戻り値を使用したくない場合は、ブランク識別子(_を使用することで、その値を破棄(省略)できます。

5.1. 最初の戻り値を省略する例

ここでは、最初の戻り値(result)を省略しています。

package main
import ("fmt")

func myFunction(x int, y string) (result int, txt1 string) {
  result = x + x
  txt1 = y + " ワールド!"
  return
}

func main() {
   _, b := myFunction(5, "ハロー")
  fmt.Println(b)
}

5.2. 2番目の戻り値を省略する例

ここでは、2番目の戻り値(txt1)を省略しています。

package main
import ("fmt")

func myFunction(x int, y string) (result int, txt1 string) {
  result = x + x
  txt1 = y + " ワールド!"
  return
}

func main() {
   a, _ := myFunction(5, "ハロー")
  fmt.Println(a)
}