本篇文章带大家学习一下golang,聊聊golang怎么判断结构体是不是有某个方法,希望对大家有所帮助。
go 判断结构体是否有某个方法
go 有时需要判断某个结构体是不是有某个方法,但是可能突然就一脸茫然,go 也可以像 php 那样判断
是的,虽然 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")
以上就是Golang判断结构体是否存在某方法的两种方式(附代码示例)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号