json.Marshalんときも同じハマり方をしたのに今回は30分くらい時間を浪費してしまったのでもうメモっておく。
MethodByName使って文字列でメソッド呼びたいとして。
(そもそもreflectパッケがあんまり早くないとかいろいろあるらしいのでこういう手法を取ろうとすること自体の是非はあるけど、一旦そこは無視)
package main
import (
"fmt"
"reflect"
)
type vvv struct {}
func (v *vvv) test1() {
fmt.Println("test1")
}
func (v *vvv) Test2() {
fmt.Println("test2")
}
func main() {
t1 := &vvv{}
//reflect.ValueOf(t1).MethodByName("test1").Call([]reflect.Value{})
reflect.ValueOf(t1).MethodByName("Test2").Call([]reflect.Value{})
}
コメントアウトしてるほうは動きません。
そら確かにパッケージちげえもんな…参照できんわな…