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 := 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语言如何判断结构体是否存在某方法”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341