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/lDkZ 著作权归作者所有。请勿转载和采集!