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

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

青灯夜游
發布: 2023-02-21 19:44:16
轉載
4364 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板