网站建设资讯

NEWS

网站建设资讯

Golang怎么判断结构体是否存在某方法

这篇“Golang怎么判断结构体是否存在某方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang怎么判断结构体是否存在某方法”文章吧。

做网站、网站建设介绍好的网站是理念、设计和技术的结合。创新互联公司拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。

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")

以上就是关于“Golang怎么判断结构体是否存在某方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


文章名称:Golang怎么判断结构体是否存在某方法
文章链接:http://njwzjz.com/article/jgohdj.html