可以使用反射库中的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。

golang 反射判断结构体是否有函数方法

原文地址: https://www.cveoy.top/t/topic/qtC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录