您好,欢迎访问一九零五行业门户网

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

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语言怎么判断结构体是否存在某方法?两种方式介绍的详细内容。
其它类似信息

推荐信息