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

时间:2023-02-14 23:07:43       来源:转载


(资料图片仅供参考)

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 := falsevar 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中文网其它相关文章!

关键词: 是否存在 两种方式 相关文章