• 技术文章 >后端开发 >Golang

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

    青灯夜游青灯夜游2023-02-21 19:44:16转载1457

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

    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语言怎么判断结构体是否存在某方法?两种方式介绍的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐:Golang go语言
    上一篇:GO goutil发布了v0.6.4版!更新速览! 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • go pprof是什么• Go中Revive是什么• go test的作用是什么• go语言有什么好处• 初探Go语言中的Goroutine和channel
    1/1

    PHP中文网