欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(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號