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

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          Go語(yǔ)言怎么判斷結(jié)構(gòu)體是否存在某方法??jī)煞N方式介紹

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

          Go語(yǔ)言怎么判斷結(jié)構(gòu)體是否存在某方法??jī)煞N方式介紹

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

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

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

          準(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)體時(shí)     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號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)