可以使用反射库中的 TypeMethodByName 函数来判断结构体是否有某个函数方法。

示例代码:

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

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