站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Go語言怎么判斷結(jié)構(gòu)體是否存在某方法?兩種方式介紹

Go語言怎么判斷結(jié)構(gòu)體是否存在某方法?下面本篇文章給大家介紹一下Golang判斷結(jié)構(gòu)體是否存在某方法的兩種方式(附代碼示例),希望對大家有所幫助!

Go語言怎么判斷結(jié)構(gòu)體是否存在某方法?兩種方式介紹

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

是的,雖然 go 沒有提供現(xiàn)成的方法,但是可以用已有的邏輯來封裝實現(xiàn)。

目前能用的方式有兩種,一種是知道完整的方法可以用接口斷言方式判斷,第二種就是用反射來完成判斷。

準(zhǔn)備需要判斷的結(jié)構(gòu)體:

type  RefData  struct  {}  func  (this  *RefData)  Show(data  any,  name  string)  string  {   data2  :=  data.(string)  +  "==="  +  name    return  data2 }
登錄后復(fù)制

接口斷言判斷:

refDataExists := false var refDataOb any = &RefData{} if _, ok := refDataOb.(interface {     Show(any, string) string }); ok {     refDataExists = true }
登錄后復(fù)制

反射判斷:

import(   "reflect" ) // 判斷結(jié)構(gòu)體方法是否存在 func MethodExists(in any, method string) bool {     if method == "" {         return false     }     p := reflect.TypeOf(in)     if p.Kind() == reflect.Pointer {         p = p.Elem()     }     // 不是結(jié)構(gòu)體時     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")
登錄后復(fù)制

【推薦學(xué)習(xí):go視頻教程】

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国产一区二区三区国产精品| 亚洲婷婷第一狠人综合精品| 四库影院永久四虎精品国产| 国产精品秦先生手机在线| 国产精品永久免费10000| 精品无人码麻豆乱码1区2区| 久久精品一区二区三区资源网| 2022国产精品自在线拍国产| 精品久久久久久无码人妻热 | 色婷婷久久久SWAG精品| 日韩精品国产另类专区 | 国内精品伊人久久久久| 精品免费久久久久国产一区 | 国产精品福利在线播放| 亚洲精品电影天堂网| 久久99精品国产自在现线小黄鸭| 99精品热女视频专线| 少妇精品久久久一区二区三区| 欧美激情国产精品视频一区二区| 亚洲理论精品午夜电影| 99久久99久久免费精品小说| 无码欧精品亚洲日韩一区| 亚洲AV无码精品色午夜果冻不卡| 精品午夜久久福利大片| 亚洲精品无码国产| 亚洲综合精品香蕉久久网| 亚洲一区精品无码| 国产精品兄妹在线观看麻豆 | 国产精品55夜色66夜色| 精品亚洲国产成人| 国产精品h在线观看| 亚洲综合一区国产精品| 欧洲精品成人免费视频在线观看| 热久久美女精品天天吊色| 精品国产免费观看久久久| 日韩精品一区二区三区中文| 久久久久国产成人精品| 99久久久国产精品免费牛牛 | 精品久久久久久中文字幕一区| 韩国精品一区二区三区无码视频| 青青国产精品视频|