国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一篇文章教會(huì)你Go語(yǔ)言基礎(chǔ)之結(jié)構(gòu)體反射

開(kāi)發(fā) 后端
本篇從主要講述Go反射結(jié)構(gòu)體的相關(guān)知識(shí):反射在結(jié)構(gòu)體中的應(yīng)用,如何單獨(dú)反射結(jié)構(gòu)體字段信息,ValueOf其他操作,如何放射結(jié)構(gòu)體綁定的方法。

[[358777]]

 前言

Hey,大家好呀,我是碼農(nóng),星期八。

反射在結(jié)構(gòu)體中的應(yīng)用,才是最廣泛的!畢竟在Go中,是用結(jié)構(gòu)體代替對(duì)象的!

所以最多的,最麻煩的,也是反射結(jié)構(gòu)體,也是最靈活的!

反射在結(jié)構(gòu)體的應(yīng)用

上次講的,只是在普通變量中的應(yīng)用,相對(duì)來(lái)說(shuō),使用的場(chǎng)景不是太多。

但是反射在結(jié)構(gòu)體中的應(yīng)用,基本會(huì)貫穿整個(gè)Go語(yǔ)言基礎(chǔ)。

示例代碼

結(jié)構(gòu)體

  1. type Student struct { 
  2.     Name   string   `json:"name" describe:"姓名"
  3.     Age    int      `json:"age" describe:"年齡"
  4.     Gender bool     `json:"gender" describe:"性別"
  5.     Hobby  []string `json:"hobby" describe:"愛(ài)好"

main

  1. func main() { 
  2.     //實(shí)例化結(jié)構(gòu)體 
  3.     var s1 = Student{ 
  4.         Name:   "張三", 
  5.         Age:    18, 
  6.         Gender: true, 
  7.         Hobby:  []string{"吃", "喝", "pia", "玩"}, 
  8.     var t = reflect.TypeOf(s1) 
  9.     fmt.Println(t.Name())     //Student 
  10.     fmt.Println(t.Kind())     //struct 
  11.     fmt.Println(t.NumField()) //結(jié)果:4,表示多少個(gè)字段 
  12.     for i := 0; i < t.NumField(); i++ { 
  13.         field := t.Field(i)//每個(gè)結(jié)構(gòu)體對(duì)象 
  14.         /* 
  15.             {Name  string json:"name" describe:"姓名" 0 [0] false
  16.             {Age  int json:"age" describe:"年齡" 16 [1] false
  17.             {Gender  bool json:"gender" describe:"性別" 24 [2] false
  18.             {Hobby  []string json:"hobby" describe:"愛(ài)好" 32 [3] false
  19.         */ 
  20.         //fmt.Println(field) 
  21.         fmt.Println("------"
  22.         fmt.Printf("field.Name:%v\n",field.Name
  23.         fmt.Printf("field.Index:%v\n",field.Index
  24.         fmt.Printf("field.Type:%v\n",field.Type) 
  25.         fmt.Printf("field.Tag:%v\n",field.Tag.Get("describe")) 
  26.  
  27.     } 

執(zhí)行結(jié)果


單獨(dú)反射指定字段信息

main代碼

  1. func main() { 
  2.     //實(shí)例化結(jié)構(gòu)體 
  3.     var s1 = Student{ 
  4.         Name:   "張三", 
  5.         Age:    18, 
  6.         Gender: true, 
  7.         Hobby:  []string{"吃", "喝", "pia", "玩"}, 
  8.     var t = reflect.TypeOf(s1) 
  9.     genderField, ok := t.FieldByName("Gender"
  10.     if ok { 
  11.         fmt.Println(genderField.Name)                //Gender 
  12.         fmt.Println(genderField.Index)               //[2] 
  13.         fmt.Println(genderField.Type)                //bool 
  14.         fmt.Println(genderField.Tag.Get("describe")) //性別 
  15.     } 

ValueOf

上述的代碼只能用的是TypeOf,只能返回類(lèi)型等信息,相對(duì)來(lái)說(shuō)不是太智能,ValueOf可以獲取值,同樣也能獲取類(lèi)型,相對(duì)來(lái)說(shuō)比TypeOf好一點(diǎn)。

示例代碼

main

  1. func main() { 
  2.     //實(shí)例化結(jié)構(gòu)體 
  3.     var s1 = Student{ 
  4.         Name:   "張三", 
  5.         Age:    18, 
  6.         Gender: true, 
  7.         Hobby:  []string{"吃", "喝", "pia", "玩"}, 
  8.     var v = reflect.ValueOf(s1) 
  9.     for i := 0; i < v.NumField(); i++ { 
  10.         field :=v.Field(i) 
  11.         fmt.Println("------"
  12.         fmt.Printf("Kind:%v\n",field.Kind()) 
  13.         fmt.Printf("值:%v\n",field.Interface()) 
  14.     } 

執(zhí)行結(jié)果

 

反射方法

上述我們反射的都是值,有沒(méi)有反射是否可以反射函數(shù),并且調(diào)用函數(shù)呢??

結(jié)構(gòu)體和綁定函數(shù)代碼

  1. type Student struct { 
  2.     Name   string   `json:"name" describe:"姓名"
  3.     Age    int      `json:"age" describe:"年齡"
  4.     Gender bool     `json:"gender" describe:"性別"
  5.     Hobby  []string `json:"hobby" describe:"愛(ài)好"
  6.  
  7. //無(wú)參方法 
  8. func (this Student) Say() { 
  9.     fmt.Printf("我是%v,我的年齡是%v,我的性別是%v,我的愛(ài)好是%v\n", this.Name, this.Age, this.Gender, this.Hobby) 
  10. //有參數(shù)方法 
  11. func (this Student) Jump(distance int) { 
  12.     fmt.Printf("我是%v,我跳遠(yuǎn)跳了%v米\n", this.Name, distance) 

main

  1. func main() { 
  2.     //實(shí)例化結(jié)構(gòu)體 
  3.     var s1 = Student{ 
  4.         Name:   "張三", 
  5.         Age:    18, 
  6.         Gender: true, 
  7.         Hobby:  []string{"吃", "喝", "pia", "玩"}, 
  8.     var t = reflect.TypeOf(s1) 
  9.     var v = reflect.ValueOf(s1) 
  10.     fmt.Println(v.NumMethod(),v.NumField()) 
  11.     for i := 0; i < v.NumMethod(); i++ { 
  12.         method := v.Method(i) 
  13.         fmt.Println("--------"
  14.         fmt.Println(method)//0x48c4e0 函數(shù)地址 
  15.         fmt.Println(method.Type())//func(int) 函數(shù)類(lèi)型,形參和返回值 
  16.         fmt.Println(t.Method(i).Name)//Jump,函數(shù)名,注意,由t來(lái)調(diào)用的 
  17.     } 

執(zhí)行結(jié)果

 

反射調(diào)用函數(shù)

  1. func main() { 
  2.     //實(shí)例化結(jié)構(gòu)體 
  3.     var s1 = Student{ 
  4.         Name:   "張三", 
  5.         Age:    18, 
  6.         Gender: true, 
  7.         Hobby:  []string{"吃", "喝", "pia", "玩"}, 
  8.     var v = reflect.ValueOf(s1) 
  9.  
  10.     //通過(guò)反射調(diào)用函數(shù) 
  11.     //調(diào)用Jump函數(shù) 
  12.     //反射調(diào)用函數(shù)必須傳一個(gè)參數(shù),不管有沒(méi)有形參都要傳 
  13.     //var args = []reflect.Value{} 
  14.     //v.MethodByName("Say").Call(args) 
  15.  
  16.     //如果需要傳參數(shù) 
  17.     //參數(shù)需要用reflect.ValueOf(1) 強(qiáng)轉(zhuǎn)一下 
  18.  
  19.     var args = []reflect.Value{reflect.ValueOf(2)} 
  20.     v.MethodByName("Jump").Call(args) 

注:注意第14行和20行代碼區(qū)別,如果要傳參數(shù),參考第20行代碼。

執(zhí)行結(jié)果


反射注意事項(xiàng)

在平常開(kāi)發(fā)中,盡量慎用反射,原因如下。

  • 反射性能可能會(huì)比較低,畢竟是反正走的,一般比正向操作慢一兩個(gè)級(jí)別。
  • 反射越多,代碼越爛,TypeOf和ValueOf都有Kind,很多情況是TypeOf和ValueOf混用的,所以對(duì)于基礎(chǔ)不好的,極不友好。
  • 在Go中,是沒(méi)有try的,如果反射沒(méi)有處理好異常,程序會(huì)直接崩潰,可能在意想不到的地方。

總結(jié)

上述我們主要講述了Go反射結(jié)構(gòu)體的相關(guān)知識(shí),包括有

  • 反射在結(jié)構(gòu)體中的應(yīng)用
  • 如何單獨(dú)反射結(jié)構(gòu)體字段信息
  • ValueOf其他操作
  • 如何放射結(jié)構(gòu)體綁定的方法

到此為止反射就講完了,一定要多嘗試,多敲敲代碼,反射的用法還有很多。

 

責(zé)任編輯:姜華 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2020-12-16 08:07:28

語(yǔ)言基礎(chǔ)反射

2021-09-15 10:00:33

Go語(yǔ)言Modules

2021-05-29 10:20:54

GoModules語(yǔ)言

2019-10-17 19:15:22

jQueryJavaScript前端

2020-12-23 08:39:11

Go語(yǔ)言基礎(chǔ)技術(shù)

2020-11-05 09:58:16

Go語(yǔ)言Map

2022-02-16 10:03:06

對(duì)象接口代碼

2020-10-22 08:33:22

Go語(yǔ)言

2020-11-11 10:52:54

Go語(yǔ)言C語(yǔ)言

2023-06-21 00:10:17

JSONWeb服務(wù)器JavaScript

2021-02-19 19:35:53

SVG 形狀元素

2020-11-13 08:14:28

JavaScript

2020-12-27 10:15:44

Go語(yǔ)言channel管道

2020-12-09 09:59:32

Go語(yǔ)言技術(shù)

2021-02-20 10:06:14

語(yǔ)言文件操作

2020-10-23 08:38:19

Go語(yǔ)言

2022-04-27 10:01:43

切片Go封裝

2020-10-25 07:33:13

Go語(yǔ)言

2021-10-09 07:10:31

Go語(yǔ)言基礎(chǔ)

2020-12-30 09:04:32

Go語(yǔ)言TCPUDP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

精品国内二区三区| 亚洲精品狠狠操| 妞干网这里只有精品| 91综合在线| yellow中文字幕久久| xxxcom在线观看| 欧美午夜激情在线| 99re精彩视频| 国产日韩av一区二区| 亚洲理论电影在线观看| 美腿丝袜一区二区三区| 精品乱码一区二区三区| 欧美日韩国产综合网| 亚洲japanese制服美女| 希岛爱理av一区二区三区| 国产精品久久久久久影视| 波多野结衣在线一区二区| 久久精品视频在线播放| 国产成人77亚洲精品www| 亚洲欧美激情精品一区二区| av影视在线看| 精品在线小视频| 自拍一区在线观看| 亚洲人成电影网站色xx| 亚洲午夜久久久影院伊人| 曰本一区二区三区视频| 日韩精选在线| 欧美一级二级三级乱码| www.亚洲高清| 成人黄色小视频在线观看| yy111111少妇影院日韩夜片| 国产精品1区2区3区| 青青青青在线视频| 国产成人av一区二区三区在线 | 欧美成人午夜影院| sese综合| 亚洲三级 欧美三级| 成人做爰视频www网站小优视频| 亚洲日韩中文字幕在线播放| 韩国成人在线| 97超级碰碰碰久久久| sdde在线播放一区二区| 国产美女精品视频免费观看| 伊人成综合网| 欧美一区亚洲二区| 国产成人午夜精品5599| 亚洲老女人av| 一本大道久久a久久综合| 欧洲成人综合网| 久久中国妇女中文字幕| 亚洲深夜福利在线观看| 国产精品高清一区二区三区| 久久精品免费看| 久久综合久久色| 亚洲午夜av在线| 国产女主播在线写真| 日韩大陆毛片av| 大奶一区二区三区| 国产一区在线免费观看| 国产黑丝在线一区二区三区| 久草在线国产| 欧美一级久久久| 国产成人一二片| 欧美日韩一区在线播放| 欧美极品少妇xxxxⅹ高跟鞋| 日本在线观看www| 欧美成人三级视频网站| 激情久久久久久久| 最近免费中文字幕中文高清百度| 91国产福利在线| 9999精品免费视频| 粉嫩av一区二区三区免费观看| 国产成人av电影在线| 在线观看av资源| 中国日韩欧美久久久久久久久| 99久久影视| 国产黄色一级网站| 69久久夜色精品国产69蝌蚪网| 国产成人夜色高潮福利影视| 亚洲成色最大综合在线| 亚洲综合色区另类av| 秋霞国产精品| 久久久福利视频| 亚洲蜜桃精久久久久久久| 中文在线免费二区三区| 97人人澡人人爽| 久久久美女毛片| 国产桃色电影在线播放| 成人在线小视频| 国产精品美女久久久久久| 天堂电影一区| 精品国产乱码久久久久久久软件| 成人免费一区二区三区视频 | 亚洲一区二区三区在线视频| 成人福利视频在线看| 成人18在线| 欧美激情中文网| 久久99九九99精品| 91成人高清| 国产欧美日韩综合精品| 国产农村妇女精品| 欧美性片在线观看| 日韩黄色影视| 欧美午夜精品久久久久久超碰 | 国产亚洲成av人片在线观看桃| 欧美天堂亚洲电影院在线观看| 香蕉521av成人网| 国产亚洲精品91在线| 亚洲视频www| 毛片网站在线观看| 日韩免费黄色av| 99精品国产91久久久久久| 久久av色综合| 久久久99国产精品免费| 色哟哟精品一区| 久久看人人摘| 国产最顶级的黄色片在线免费观看| 久久久午夜视频| 国产女同互慰高潮91漫画| 欧洲亚洲精品久久久久| 99久热在线精品视频| 亚洲美女精品成人在线视频| 奇米777欧美一区二区| 性欧美video高清bbw| 免费看成人午夜电影| 欧美日韩国产片| 国产一区二区你懂的| 免费黄色电影在线观看| 狠狠综合久久av| 欧美日韩免费在线视频| 亚洲小说欧美另类社区| 91啦中文在线| 久久99精品久久久久久三级| 3d动漫精品啪啪1区2区免费| 久久香蕉精品| 2021中文字幕在线| 91看片淫黄大片91| 伊人久久久久久久久久久| 成人av网在线| 久久久久久亚洲精品美女| 日韩手机在线观看视频| 午夜精品久久久久久久99热浪潮 | 亚洲免费专区| 影音先锋可以看的网站| 成人黄色生活片| 欧美日韩国产色视频| 久久精品免费一区二区三区| 久久久久久青草| 欧美深深色噜噜狠狠yyy| 亚洲第一页中文字幕| 国产精品亚洲专一区二区三区 | 欧美特黄级在线| 91久久午夜| av影院在线免费观看| 久久国产午夜精品理论片最新版本| 中文字幕亚洲天堂| 国产精品电影一区二区三区| 区一区二视频| 91在线直播| 欧美在线观看视频免费| 九九热最新视频//这里只有精品 | 国产男女激情视频| 欧美专区福利在线| 欧美性videosxxxxx| 国模一区二区三区白浆| 日本免费一区二区视频| 日本不卡1区2区3区| 国产综合18久久久久久| 精品爽片免费看久久| 久久蜜桃av一区精品变态类天堂| 精品在线手机视频| 91精品专区| 青青青青在线视频| 国产精品色婷婷视频| 精品久久一二三区| 中文字幕 久热精品 视频在线| 欧美一区久久| 中文在线免费二区三区| jizz欧美大全| 欧美日韩一区二区三区在线观看免| 亚洲美女性视频| 亚洲精品视频在线观看网站| 国产精品毛片一区二区三区| 美女久久精品| 日本美女高清在线观看免费| 国产成人在线免费看| 成人免费视频网站| 自拍偷拍亚洲区| 日韩欧美大尺度| www.一区二区| 欧美国产高清| 国产精品视频一区视频二区| 国产视频福利在线| 欧美少妇性生活视频| 高清国产在线一区| 欧美大片欧美激情性色a∨久久| 欧美精品 日韩| 亚洲免费观看高清在线观看| 久久av资源站| 欧美日韩国产高清|