Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

golang 反射拿不到method

如下代码:
其中保持两个地方不能改变:

  1. func (t *t1) Name() string { 必须是指针
  2. reflect.ValueOf(m) 必须是值

怎么才能拿到 方法呢?

package main

import (
    "fmt"
    "reflect"
)

type t1 struct{}

func (t *t1) Name() string {
    return "tbl_t1"
}
func main() {
    m := t1{}
    rv := reflect.ValueOf(m)
    fn := rv.MethodByName("Name")
    fmt.Println(fn)
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
func main() {
    // new pointer type
    m := new(t1)
    rv := reflect.ValueOf(m)
    fn := rv.MethodByName("Name")
    fmt.Println(fn)
    // call method
    fmt.Println(fn.Call(nil)[0].String())
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...