首頁 >後端開發 >Golang >Go語言怎麼判斷結構體是否存在某方法?兩種方式介紹

Go語言怎麼判斷結構體是否存在某方法?兩種方式介紹

青灯夜游
青灯夜游轉載
2023-02-14 19:32:304353瀏覽

Go語言怎麼判斷結構體是否存在某方法?以下這篇文章為大家介紹Golang判斷結構體是否存在某方法的兩種方式(附程式碼範例),希望對大家有幫助!

Go語言怎麼判斷結構體是否存在某方法?兩種方式介紹

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

是的,雖然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影片教學

以上是Go語言怎麼判斷結構體是否存在某方法?兩種方式介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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