Goでは何でも型に定義できるかと思いますが(例外があるかどうかは定かではない)、例えば関数もそのまま型として使用できます。
例えば以下のように、
ここでは”func(float64) float64
“を型名として使用して、二つの関数をスライスに格納して、それぞれの関数を無名関数の引数(あえて無名関数でなくても良いですが)としてfor rangeループで実行させています。
package main
import (
"fmt"
"math"
)
func main() {
f1 := func(a float64) float64{
return a*a
}
f2 := func(a float64) float64{
return math.Pow(a, 3)
}
fs := []func(float64) float64{f1, f2} // "[]func(float64) float64" is a type
for _, fss := range fs{
func(f func(float64) float64){
fmt.Println(f(3))
}(fss)
}
}
他の言語からすると奇妙な記述方法ではありますが、Goではこのような記法も成立するのだと。
admin