91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

密云县| 米易县| 金湖县| 泰州市| 黄平县| 咸阳市| 石首市| 海口市| 佳木斯市| 东乌珠穆沁旗| 潜江市| 扎赉特旗| 黄浦区| 蒙自县| 宁陵县| 新营市| 汶上县| 巴青县| 哈密市| 定远县| 盐边县| 白银市| 瑞昌市| 安化县| 宜昌市| 通城县| 彭山县| 潮安县| 岳阳县| 方正县| 石城县| 杭锦旗| 汪清县| 西乡县| 常宁市| 盱眙县| 宁夏| 鹤岗市| 乌鲁木齐市| 昭觉县| 通化市|