返り値なし
引数も取らない場合は次のようになります。
func p() {
fmt.Println("printed.")
}
引数をとる場合は( )内に記載します。
func cal(x int, y int) {
fmt.Println(x + y)
}
連続した引数が同じ型である場合、型の表記をまとめる事ができます。
func cal(x, y int) {
fmt.Println(x + y)
}
関数を実行するときは次のようにします。
p() cal(1, 2)
返り値あり
返り値の型も定義する事が必要です。
func add(x, y int) int {
return x + y
}
返り値が複数ある場合は、( )で括ります。
func multi(x, y int) (string, int) {
return "result is ", x * y
}
返り値に名前をつける事もできます。
func div(x, y float64) (result float64) {
result = x / y
return
}
次のように複数の返り値に名前をつけることもできます。
複数にする場合、全てに名前をつける必要があります。
func sub(x, y int) (mode string, result int) {
result = x - y
mode = "substraction"
return mode, result
}
返り値が複数ある場合、名前をつけることによって、
その関数の冒頭を確認するだけで、どんな関数なのかイメージできるでしょう。
func cal(x, y int) (price, tax int) {
.....
}
関数を実行するときは次のようにします。
a := add(1, 2) b, c := multi(7, 6) d := div(10, 3) e, f := sub(5, 8)
次のように、特定の返り値を破棄することも可能です。
_, f := sub(5, 8)
無名関数、即時関数
関数内に関数を記述することもできます。
func main() {
innerFunc := func(x, y int) {
fmt.Println("innerFuncResult", x + y)
}
innerFunc(8, 5)
}
これを無名関数と呼びます。
上記の例だと、関数を変数に定義して、その後実行していますが、
次のように、即時実行させることもできます。
func main() {
func(x, y int) {
fmt.Println("innerFuncResult", x + y)
}(8, 5)
}
このような関数を即時関数と呼びます。
もちろん、無名関数、即時関数どちらも、返り値を定義する事が可能です。
func main() {
z := func(x, y int) int {
return x * y
}(8, 5)
fmt.Println(z)
}