[Go] 任意の構造体が持つ関数を列挙する
作成日: 2021年03月07日
reflect
パッケージの関数を組み合わせることで、任意の構造体が持つ関数を列挙することができます。下記の例では、構造体 Hoge
が持っている関数名を全て出力します。
package main
import (
"fmt"
"reflect"
)
type Hoge struct {
}
func (h *Hoge) First() string {
return "one"
}
func (h *Hoge) Second() string {
return "two"
}
func main() {
h := &Hoge{}
t := reflect.TypeOf(h)
for i := 0; i < t.NumMethod(); i++ {
fmt.Println(t.Method(i).Name)
}
}
説明
reflect.TypeOf()
関数で関数名を取得したい構造体を引数に渡します。返り値としてType
型のデータが返されます。t.NumMethod()
はh
が持つ関数の数を返します。この関数の数だけループを行います。t.Method(i).Name
とすることで、i
番目の関数の名前を取得できます。
実行結果
First
Second