首頁  >  文章  >  後端開發  >  Golang判斷結構體是否存在某方法的兩種方式(附程式碼範例)

Golang判斷結構體是否存在某方法的兩種方式(附程式碼範例)

藏色散人
藏色散人轉載
2022-11-28 16:22:165800瀏覽

這篇文章帶大家學習一下Golang,聊聊Golang怎麼判斷結構體是不是有某個方法,希望對大家有幫助。

Golang判斷結構體是否存在某方法的兩種方式(附程式碼範例)

go 判斷結構體是否有某個方法

go 有時需要判斷某個結構體是不是有某個方法,但是可能突然就一臉茫然,go 也可以像php 那樣判斷

是的,雖然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中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除