中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang怎么判斷結構體是否存在某方法

發布時間:2022-11-28 16:34:12 來源:億速云 閱讀:205 作者:iii 欄目:編程語言

這篇“Golang怎么判斷結構體是否存在某方法”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“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")

以上就是關于“Golang怎么判斷結構體是否存在某方法”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

罗平县| 勃利县| 宁夏| 万山特区| 黔西县| 井冈山市| 成安县| 南郑县| 班戈县| 麻城市| 翁牛特旗| 金阳县| 阿拉善左旗| 陆河县| 融水| 定襄县| 唐河县| 延庆县| 漳平市| 大竹县| 景泰县| 汤原县| 万安县| 漳浦县| 新干县| 介休市| 阳原县| 米林县| 无为县| 平罗县| 宜黄县| 曲沃县| 剑川县| 东明县| 木兰县| 柘荣县| 定边县| 山西省| 广水市| 龙里县| 通化市|