返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Go语言怎么判断结构体是否存在某方法?两种方式介绍
  • 569
分享到

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

Golanggo语言 2023-05-14 20:05:41 569人浏览 八月长安
摘要

Go语言怎么判断结构体是否存在某方法?下面本篇文章给大家介绍一下golang判断结构体是否存在某方法的两种方式(附代码示例),希望对大家有所帮助!go 有时需要判断某个结构体是不是有某个方法,但是可能突然就一脸茫然,go 也可以像 PHP

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视频教程

以上就是Go语言怎么判断结构体是否存在某方法?两种方式介绍的详细内容,更多请关注编程网其它相关文章!

--结束END--

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

本文链接: https://lsjlt.com/news/203643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作