[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