登录
首页 >  Golang >  Go教程

Go语言如何判断结构体是否存在某方法

来源:亿速云

时间:2023-03-02 10:28:29 493浏览 收藏

你在学习Golang相关的知识吗?本文《Go语言如何判断结构体是否存在某方法》,主要介绍的内容就涉及到go语言,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

这篇文章主要介绍了Go语言如何判断结构体是否存在某方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇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语言如何判断结构体是否存在某方法”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Go语言如何判断结构体是否存在某方法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注golang学习网行业资讯频道。

终于介绍完啦!小伙伴们,这篇关于《Go语言如何判断结构体是否存在某方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表