本文给大家带来了关于GO语言教程的相关知识分享,一起聊聊在Go语言中判断结构体是否存在某方法,并附上示例代码,下面一起来看一下。
在Go语言中判断结构体是否存在某方法之实现过程分享
GO语言有时需要判断某个结构体是不是有某个方法,虽然 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语言中判断结构体是否存在某方法之实现过程分享,翼速应用平台内有更多相关资讯,欢迎查阅!
我来说两句