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

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

藏色散人
發布: 2022-11-28 20:41:04
轉載
5885 人瀏覽過

這篇文章帶大家學習一下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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板