golang 反射判断结构体是否有函数方法
可以使用反射库中的Type和MethodByName函数来判断结构体是否有某个函数方法。
示例代码:
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func (p *Person) SayHello() {
fmt.Println("Hello, my name is", p.Name)
}
func HasMethod(v interface{}, methodName string) bool {
reflectValue := reflect.ValueOf(v)
reflectType := reflectValue.Type()
method, ok := reflectType.MethodByName(methodName)
return ok && method.Type.NumIn() == 1 && method.Type.In(0) == reflect.TypeOf(v)
}
func main() {
p := &Person{Name: "Tom", Age: 18}
fmt.Println(HasMethod(p, "SayHello")) // true
fmt.Println(HasMethod(p, "SayGoodbye")) // false
}
在这个示例中,我们定义了一个Person结构体,并在其中定义了一个SayHello方法。我们可以通过调用HasMethod函数来判断结构体中是否有某个方法。如果结构体中有该方法,则返回true,否则返回false。
原文地址: https://www.cveoy.top/t/topic/qtC 著作权归作者所有。请勿转载和采集!