Go语言如何判断结构体是否存在某方法

其他教程   发布日期:2023年06月18日   浏览次数:448

这篇文章主要介绍了Go语言如何判断结构体是否存在某方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言如何判断结构体是否存在某方法文章都会有所收获,下面我们一起来看看吧。

go 有时需要判断某个结构体是不是有某个方法,但是可能突然就一脸茫然,go 也可以像 php 那样判断

是的,虽然 go 没有提供现成的方法,但是可以用已有的逻辑来封装实现。

目前能用的方式有两种,一种是知道完整的方法可以用接口断言方式判断,第二种就是用反射来完成判断。

准备需要判断的结构体:

  1. type RefData struct {}
  2. func (this *RefData) Show(data any, name string) string {
  3. data2 := data.(string) + "===" + name
  4. return data2
  5. }

接口断言判断:

  1. refDataExists := false
  2. var refDataOb any = &RefData{}
  3. if _, ok := refDataOb.(interface {
  4. Show(any, string) string
  5. }); ok {
  6. refDataExists = true
  7. }

反射判断:

  1. import(
  2. "reflect"
  3. )
  4. // 判断结构体方法是否存在
  5. func MethodExists(in any, method string) bool {
  6. if method == "" {
  7. return false
  8. }
  9. p := reflect.TypeOf(in)
  10. if p.Kind() == reflect.Pointer {
  11. p = p.Elem()
  12. }
  13. // 不是结构体时
  14. if p.Kind() != reflect.Struct {
  15. return false
  16. }
  17. object := reflect.ValueOf(in)
  18. // 获取到方法
  19. newMethod := object.MethodByName(method)
  20. if !newMethod.IsValid() {
  21. return false
  22. }
  23. return true
  24. }
  25. // 使用
  26. refDataExists := MethodExists(&RefData{}, "Show")

以上就是Go语言如何判断结构体是否存在某方法的详细内容,更多关于Go语言如何判断结构体是否存在某方法的资料请关注九品源码其它相关文章!