站长资讯网
最全最丰富的资讯网站

Go语言怎么判断结构体是否存在某方法?两种方式介绍

Go语言怎么判断结构体是否存在某方法?下面本篇文章给大家介绍一下Golang判断结构体是否存在某方法的两种方式(附代码示例),希望对大家有所帮助!

Go语言怎么判断结构体是否存在某方法?两种方式介绍

go 有时需要判断某个结构体是不是有某个方法,但是可能突然就一脸茫然,go 也可以像 php 那样判断

是的,虽然 go 没有提供现成的方法,但是可以用已有的逻辑来封装实现。

目前能用的方式有两种,一种是知道完整的方法可以用接口断言方式判断,第二种就是用反射来完成判断。

准备需要判断的结构体:

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")
登录后复制

【推荐学习:go视频教程】

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号