Go 言語の関数の戻り値
1. 戻り値 (Return Values)
関数から値を返したい場合は、戻り値のデータ型(int や string など)を定義し、関数内部で return キーワードを使用する必要があります。
1.1. シンタックス
func FunctionName(param1 type, param2 type) type {
// 実行されるコード
return output
}1.2. 戻り値の実装例
以下の例では、myFunction() が2つの整数(x と y)を受け取り、その和(x + y)を整数型(int)として返しています。
package main
import ("fmt")
func myFunction(x int, y int) int {
return x + y
}
func main() {
fmt.Println(myFunction(1, 2))
}実行結果:
32. 名前付き戻り値 (Named Return Values)
Go言語では、戻り値に変数を割り当てて名前を付けることができます。
2.1. ネイキッドリターンの実装
以下の例では、戻り値を result(int 型)として定義しています。この場合、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つの戻り値をそれぞれ変数(a と b)に格納する例です。
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)
}