本文是关于Golang的详细知识教程解析,一起聊聊在Golang中怎么判断结构体是不是有某个方法,希望能够帮助到大家。


Golang教程:一文教会大家判断结构体是否存在某方法



Golang教程:一文教会大家判断结构体是否存在某方法



要判断结构体是否存在某方法有两种方式,一种是知道完整的方法可以用接口断言方式判断,第二种就是用反射来完成判断,教程如下。


准备需要判断的结构体:


type  RefData  struct  {}
 
func  (this  *RefData)  Show(data  any,  name  string)  string  {
  data2  :=  data.(string)  +  "==="  +  name
 
  return  data2
}


接口断言判断:


refDataExists := false
var refDataOb any = &RefData{}
if _, ok := refDataOb.(interface {
    Show(any, string) string
}); ok {
    refDataExists = true
}


反射判断:


import(
  "reflect"
)
// 判断结构体方法是否存在
func MethodExists(in any, method string) bool {
    if method == "" {
        return false
    }
    p := reflect.TypeOf(in)
    if p.Kind() == reflect.Pointer {
        p = p.Elem()
    }
    // 不是结构体时
    if p.Kind() != reflect.Struct {
        return false
    }
    object := reflect.ValueOf(in)
    // 获取到方法
    newMethod := object.MethodByName(method)
    if !newMethod.IsValid() {
        return false
    }
    return true
}
// 使用
refDataExists := MethodExists(&RefData{},  "Show")


在Golang中判断结构体是否存在某方法的详细解析就到这里,翼速应用平台内有更多相关资讯,欢迎查阅!