search
LoginSignup
3

More than 5 years have passed since last update.

posted at

Organization

Go言語:変数が関数かどうかを返す関数

変数が関数かどうかを判断する関数です。
この関数はメタプログラミングすることが目的です。
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))
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3