変数が関数かどうかを判断する関数です。
この関数はメタプログラミングすることが目的です。
reflect
モジュールを使います。
func IsFunction(value interface{}) bool {
if reflect.ValueOf(value).Type().Kind() == reflect.Func {
return true
}
return false
}
サンプルコード:
main.go
package main
import (
"log"
"reflect"
)
func DoSomething() {}
type Foo struct {}
func (this *Foo) DoSomething() {}
func IsFunction(value interface{}) bool {
if reflect.ValueOf(value).Type().Kind() == reflect.Func {
return true
}
return false
}
func main() {
log.Println(IsFunction(true))
log.Println(IsFunction(1))
log.Println(IsFunction("string"))
log.Println(IsFunction(DoSomething))
foo := &Foo{}
log.Println(IsFunction(foo.DoSomething))
}