精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇帶給你Go語言的反射機制

開發 后端
在計算機學中,反射式編程(英語:reflective programming)或反射(英語:reflection),是指計算機程序在運行時(runtime)可以訪問、檢測和修改它本身狀態或行為的一種能力。用比喻來說,反射就是程序在運行的時候能夠“觀察”并且修改自己的行為。

因為沒有強類型語言的經驗,反射這個概念,之前確實沒怎么接觸過。在維基百科上搜了一下,具體解釋如下:

  • 在計算機學中,反射式編程(英語:reflective programming)或反射(英語:reflection),是指計算機程序在運行時(runtime)可以訪問、檢測和修改它本身狀態或行為的一種能力。用比喻來說,反射就是程序在運行的時候能夠“觀察”并且修改自己的行為。

go 中的反射也是這種作用,可以在程序運行期間,獲取變量的類型與值的信息,然后進行訪問或或者修改。go 語言中,內置了 reflect 包,用來獲取一個變量的類型(type)與值(value),對應的方法分別為 reflect.TypeOf() 和 reflect.ValueOf()。

反射類型

TypeOf 方法,會返回該變量的類型對象,類型對象下可以獲取到變量的類型與種類。

  1. import ( 
  2.  "fmt" 
  3.  "reflect" 
  4.  
  5. func main() { 
  6.  // 定義一個int類型的變量 
  7.  var i int = 1 
  8.  // 獲取變量的類型對象 
  9.  var typeOfNum = reflect.TypeOf(i)  
  10.  
  11.   // 輸出類型與種類 
  12.   typeOfNumName = typeOfNum.Name() 
  13.   typeOfNumKind = typeOfNum.Kind() 
  14.   fmt.Printf("name: %s, kind: %s", typeOfNumName, typeOfNumKind) 

可以看到,此時的類型與種類都為 int。

類型與種類

類型表示定義變量的時候指定的類型,可以反映 type 關鍵字定義的類型,而種類是變量最終歸屬的類型。說起來可能比較蒼白,我們直接上代碼。

  1. type num int 
  2.  
  3. // 定義一個num類型的變量 
  4. var i num = 1 
  5. var typeOfNum = reflect.TypeOf(i)  

可以看到,此時的類型為 num,種類為 int。

對于一些引用類型的變量,比如切片、函數、結構體,kind 都能準確反映其底層的類型。

  1. func printTypeOf(typeOf reflect.Type) { 
  2.  fmt.Printf("name: %s, kind: %s\n", typeOf.Name(), typeOf.Kind()) 
  3.  
  4. type Person struct {} 
  5. type IntSlice []int 
  6. func main() { 
  7.  var a = IntSlice{} 
  8.  var b = Person{} 
  9.  printTypeOf(reflect.TypeOf(a)) 
  10.  printTypeOf(reflect.TypeOf(b)) 

 

而面對匿名結構體或者匿名函數,其類型值會返回為空。

  1. func main() { 
  2.  var a = struct {}{} 
  3.  printTypeOf(reflect.TypeOf(a)) 

 

反射值

ValueOf 方法,可以獲取一個變量的值。

  1. var i = 3.1415926 
  2. var s = "歡迎關注我的公眾號:『自然醒的筆記本』" 
  3.  
  4. fmt.Println(reflect.ValueOf(s)) 
  5. fmt.Println(reflect.ValueOf(i)) 

 

通過反射的值對象,也能取到變量的種類,并且還能根據其種類,調用對應的方法獲取變量的真實值。

  1. var i = 100 
  2. var v = reflect.ValueOf(i) 
  3.  
  4. fmt.Println(v.Int()) // 如果值是 Int 類型,可以通過 Int 方法獲取具體值 
  5. fmt.Println(v.Kind()) 

 

修改值

通過反射得到的值對象,可以對變量本身的值進行修改。首先,在獲取反射值時,不能直接獲取變量的反射值,而是要先取其指針的值對象。

  1. var i = 100 
  2. var v = reflect.ValueOf(&i) // 取出變量i的指針的值對象 
  3.  
  4. fmt.Println(v.Kind(), v) 

取出指針的值對象之后,不能立即賦值,因為此時拿到的是變量的地址。

要賦值的話,需要先調用 Elem 方法,取出具體元素,然后進行賦值。

  1. var i = 100 
  2. var v = reflect.ValueOf(&i) // 取出變量i的指針的值對象 
  3.  
  4. var e = v.Elem() 
  5. e.SetInt(500) // 修改元素值 
  6.  
  7. fmt.Println(e.Kind(), i) 

 

值對象與結構體

前面介紹過,通過反射可以得到變量的值,對于結構體來說,也是一樣。

  1. type Person struct { 
  2.  name string 
  3.  age int 
  4.  gender string 
  5.  address string 
  6.  
  7. var p = Person{"Shenfq", 25, "男""湖南長沙"
  8. var v = reflect.ValueOf(p) 
  9.  
  10. fmt.Println(v.Kind(), v) 

 

反射值對象還提供了一些方法,專門用來針對結構體成員的信息獲取。

NumField()

NumField() 可以獲取結構體成員的具體數量。

  1. var p = Person{"Shenfq", 25, "男""湖南長沙"
  2. var v = reflect.ValueOf(p) 
  3.  
  4. fmt.Println("Person 結構體成員數:", v.NumField()) 

 

Field()

Field() 可以獲取結構體指定索引位置的成員的反射值。

  1. var p = Person{"Shenfq", 25, "男""湖南長沙"
  2. var v = reflect.ValueOf(p) 
  3. var num = v.NumField() 
  4. for i :=0; i < num; i++ { 
  5.   var val = v.Field(i) 
  6.   fmt.Printf("Person[%d]: %s %v\n", i, val.Type(), val) 

 

FieldByName()

FieldByName() 可以獲取結構體指定成員名稱的成員的反射值。

  1. var p = Person{"Shenfq", 25, "男""湖南長沙"
  2. var v = reflect.ValueOf(p) 
  3. var vOfName = v.FieldByName("name"
  4. fmt.Printf("Person[name]: %s %v\n", vOfName.Type(), vOfName) 

 

- END -

責任編輯:姜華 來源: 自然醒的筆記本
相關推薦

2021-06-24 06:35:00

Go語言進程

2021-04-09 10:38:59

Go 語言數組與切片

2021-04-06 10:19:36

Go語言基礎技術

2021-04-01 10:51:55

MySQL鎖機制數據庫

2021-04-20 06:12:09

Swift 反射 Mirror反射機制

2021-03-24 06:06:13

Go并發編程Singlefligh

2021-07-12 06:11:14

SkyWalking 儀表板UI篇

2022-04-29 14:38:49

class文件結構分析

2021-04-08 11:00:56

CountDownLaJava進階開發

2021-07-21 09:48:20

etcd-wal模塊解析數據庫

2022-02-17 08:53:38

ElasticSea集群部署

2021-03-12 09:21:31

MySQL數據庫邏輯架構

2021-06-21 14:36:46

Vite 前端工程化工具

2021-01-28 08:55:48

Elasticsear數據庫數據存儲

2021-04-14 14:16:58

HttpHttp協議網絡協議

2024-06-13 08:34:48

2022-03-22 09:09:17

HookReact前端

2023-03-29 07:45:58

VS編輯區編程工具

2021-07-08 07:30:13

Webpack 前端Tree shakin

2023-03-13 09:31:04

點贊
收藏

51CTO技術棧公眾號

欧美日免费三级在线| 国产人成亚洲第一网站在线播放| 欧美大胆a视频| 在线xxxxx| 欧美人体一区二区三区| 国产精品国产a级| 91pron在线| 色一情一乱一伦| 99久久亚洲精品| 亚洲国产一区自拍| 亚洲xxx在线观看| 大香伊人久久| 国产精品视频免费看| caoporn国产精品免费公开| 亚洲永久精品在线观看| 一区二区在线影院| 亚洲欧洲在线视频| 下面一进一出好爽视频| 偷拍视频一区二区三区| 一区二区三区小说| 一本色道久久综合亚洲二区三区| 好男人www在线视频| 麻豆一区二区99久久久久| 久久久亚洲天堂| 男人天堂资源网| 亚洲精品456| 欧美成人精品二区三区99精品| 性生交免费视频| 筱崎爱全乳无删减在线观看| 亚洲少妇30p| 人禽交欧美网站免费| 亚洲黄色在线播放| 国内精品久久久久影院一蜜桃| 57pao成人国产永久免费| 亚洲熟女www一区二区三区| 欧美久久精品一级c片| 亚洲国产日韩欧美综合久久| 免费欧美一级片| 9999精品免费视频| 欧洲视频一区二区| 成人在线观看a| 成人av观看| 亚洲成人免费av| 日本中文字幕一级片| h网站在线免费观看| 久久蜜臀中文字幕| 精品免费一区二区三区蜜桃| 亚洲第一色视频| 国产91精品露脸国语对白| 69堂成人精品视频免费| 99热这里只有精品在线观看| 激情欧美日韩一区二区| 成人av在线亚洲| 国产影视一区二区| 精品一区二区三区久久久| 国产精品美女呻吟| 亚洲综合网av| 久久国产麻豆精品| 91九色在线视频| 国产草草影院ccyycom| 国产精品一区久久久久| 91国产在线免费观看| 国产黄色av网站| 国产精品1区2区| 成人自拍网站| 四虎精品一区二区三区| 成人av免费在线观看| 国产欧美综合精品一区二区| 人妻丰满熟妇av无码区hd| 99久久免费国产| 麻豆一区区三区四区产品精品蜜桃| 污污网站免费在线观看| 91啦中文在线观看| 亚洲国产另类久久久精品极度| www黄在线观看| 中文字幕在线不卡一区二区三区| 黄色网zhan| 国产精品69xx| 色综合天天视频在线观看| 波多结衣在线观看| 91亚洲精品在看在线观看高清| 精品国产一区二区精华| 中文字幕免费看| 91免费精品| 欧美精品videosex牲欧美| 日韩黄色在线视频| 免费人成在线不卡| 99九九视频| 日韩a在线看| 综合久久国产九一剧情麻豆| 国产原创中文在线观看 | 久久亚洲综合色一区二区三区| 日本亚洲欧洲精品| 国产在线69| 五月婷婷综合在线| 亚洲精品自拍网| 风间由美中文字幕在线看视频国产欧美 | 久久wwww| 亚洲乱码国产乱码精品精天堂| 久久精品色妇熟妇丰满人妻| 午夜欧美视频| 国产成人午夜视频网址| 国产毛片久久久久| 91免费国产在线观看| 在线一区日本视频| 操人在线观看| 69堂精品视频| 久久av无码精品人妻系列试探| 99久久精品费精品国产风间由美| 亚州国产精品久久久| 一区二区视频网| 成人av网站大全| 四虎影院一区二区| 欧美一区国产| 精品国产乱码久久久久久闺蜜| 一级肉体全黄裸片| 一本一道久久综合狠狠老精东影业| 国产美女久久精品香蕉69| 五月婷婷六月丁香综合| 亚洲精品网站在线观看| 国产成人手机视频| 日韩高清电影免费| 欧美激情一二区| 国产精品久久久久久免费免熟| 久久久久久久久蜜桃| 男人添女人荫蒂免费视频| 黄色日韩网站| 国产亚洲欧美日韩美女| 亚洲久久在线观看| 成人在线一区二区三区| 日韩精品一区二区三区电影| 久久精品资源| 一本久久综合亚洲鲁鲁| 欧美 日韩 精品| av亚洲精华国产精华精华| 大陆极品少妇内射aaaaaa| 国产人妖一区| 中文字幕一区电影| 亚洲毛片一区二区三区| 91丨国产丨九色丨pron| 国产毛片久久久久久国产毛片| 亚洲一区导航| 日韩一区二区欧美| 一区二区三区精彩视频| 国产精品久久精品日日| 亚洲成色www.777999| 国产在视频线精品视频www666| 91精品国产91久久久久久最新| 精品国产九九九| 亚洲综合免费观看高清在线观看| 成人在线短视频| 欧美成人综合| 国产伦精品一区二区三区免| 97蜜桃久久| 日韩高清免费在线| 日本视频免费观看| 国产精品青草综合久久久久99| 天天影视综合色| 久久免费大视频| 国产有码一区二区| 影音先锋在线视频| 亚洲精品电影网在线观看| 日韩不卡视频在线| 久久精品亚洲精品国产欧美| 无码少妇一区二区三区芒果| 精品理论电影在线| 成人国产精品久久久久久亚洲| 老司机免费在线视频| 91精品国产丝袜白色高跟鞋| 精品无码久久久久| 99在线视频精品| 18岁视频在线观看| 999国产精品视频| 99蜜桃在线观看免费视频网站| 爱搞国产精品| 中文字幕久精品免费视频| 国产一区二区三区三州| 亚洲国产精品人人做人人爽| 黄色正能量网站| 美女网站在线免费欧美精品| 国产精品一二三在线观看| 老汉色老汉首页av亚洲| 国产精品∨欧美精品v日韩精品| 中文日本在线观看| 日韩欧美国产综合| 国产乱国产乱老熟| 中文字幕在线播放不卡一区| 日本泡妞xxxx免费视频软件| 国产精品最新自拍| 在线观看成人av电影| 国产精品x8x8一区二区| 国产高清视频一区三区| 天堂av中文在线| 亚洲日韩中文字幕| 精品免费久久久| 色诱视频网站一区| 青草影院在线观看| 久久综合精品国产一区二区三区| gogogo高清免费观看在线视频| 亚洲电影在线| 久久久国产精华液999999| 国产女人18毛片水真多18精品| 国产精品久久久久久久久久久不卡 | 国产精品一区二区在线观看不卡| 免费无码毛片一区二三区| 日韩精品影视| 精品伦精品一区二区三区视频| 午夜不卡一区| 日产日韩在线亚洲欧美| 国产后进白嫩翘臀在线观看视频| 中文字幕亚洲专区| 水中色av综合| 精品国产污网站| 国产精品亚洲lv粉色| 色域天天综合网| 日韩免费在线视频观看| 亚洲人精品午夜| www亚洲色图| 99久久久国产精品免费蜜臀| 亚洲第一色av| 免费在线一区观看| 日本一极黄色片| 99热精品在线| 青春草国产视频| 欧美福利影院| 免费看污污视频| 欧美日韩国产在线观看网站| 久久偷看各类wc女厕嘘嘘偷窃| 在线日韩成人| 亚洲a区在线视频| 欧美天堂一区二区| 国产精品久久电影观看| 三上悠亚激情av一区二区三区| 97精品国产97久久久久久免费 | 国产精品乱码人人做人人爱| 精品成人av一区二区三区| 不卡av在线免费观看| 亚洲视频天天射| 国产精品2024| 少妇欧美激情一区二区三区| 国产一区二区三区在线看麻豆| 一本岛在线视频| 奇米精品一区二区三区在线观看一 | av网在线观看| 一区二区三区久久精品| 黄网在线免费| 亚洲深夜福利网站| 黄色在线视频观看网站| 国产亚洲精品美女久久久| 色视频在线观看| 亚洲一区二区久久| eeuss影院www在线观看| 国产一区av在线| 色哟哟免费在线观看| 久久九九免费视频| 天堂成人av| 午夜精品美女自拍福到在线| av免费不卡国产观看| 午夜精品视频在线| 原纱央莉成人av片| 国产精品九九九| 日本一区二区三区中文字幕| 成人网在线观看| 大奶一区二区三区| 精品网站在线看| 欧美猛男做受videos| 亚洲精品一卡二卡三卡四卡| 中文字幕av亚洲精品一部二部| 日本高清视频免费在线观看| 亚洲东热激情| 日本在线视频www| 另类小说视频一区二区| 黑人无套内谢中国美女| 99视频一区二区| 欧美大波大乳巨大乳| 国产精品嫩草影院av蜜臀| a级片在线观看免费| 亚洲成av人片一区二区三区| 国产综合精品视频| 欧美日韩国产综合一区二区 | 神马影院我不卡午夜| 99国内精品久久久久久久| 国产1区2区3区中文字幕| 一本久道久久综合婷婷鲸鱼| 波多野结衣天堂| 粉嫩绯色av一区二区在线观看 | 久久悠悠精品综合网| 日韩精品一区二区三区外面| 久久精品青草| 欧美a在线视频| 精品一区二区三区久久久| 午夜免费福利影院| 日本一区二区高清| 国产一级av毛片| 91黄色免费网站| 国模人体一区二区| 中文字幕日韩电影| 久久五月精品中文字幕| 国产精品久久久久久久av大片| 亚洲一区二区免费在线观看| 欧美日韩国产一二| 欧美+亚洲+精品+三区| 国产成人综合一区| 国产99久久久精品| 亚洲精品视频网址| 欧美日韩午夜激情| www.激情五月| 在线看日韩欧美| 男人av在线播放| 亚洲综合在线做性| 欧美日韩性在线观看| 日韩av新片网| 精品一区二区久久久| 无码少妇精品一区二区免费动态| 亚洲大片在线观看| 97超碰人人草| 综合国产在线视频| 国产美女精品写真福利视频| 2019国产精品视频| 999久久久国产精品| 国产一区视频免费观看| 高清成人免费视频| 欧美高清视频一区二区三区| 欧美三级乱人伦电影| 亚州精品国产精品乱码不99按摩| 欧美老少配视频| 国产亚洲亚洲国产一二区| 四虎影院一区二区三区| 久久黄色影院| av直播在线观看| 午夜国产精品一区| 蜜桃视频在线观看www| 久久亚洲精品网站| 影视一区二区三区| 看高清中日韩色视频| 亚洲精品四区| 97香蕉碰碰人妻国产欧美| 伊人夜夜躁av伊人久久| 国产精品亚洲欧美在线播放| 日韩在线播放av| 日韩成人精品一区二区三区| 亚洲成人第一| 日本不卡高清视频| 天堂av网手机版| 欧美美女一区二区| 午夜看片在线免费| 国产一区二区在线播放| 97人人精品| 亚洲成人手机在线观看| 亚洲免费在线播放| 精品人妻aV中文字幕乱码色欲| 欧美精品手机在线| 一区二区三区视频播放| 日韩欧美视频免费在线观看| 国产**成人网毛片九色 | 91久久大香伊蕉在人线| 亚洲视频电影在线| 中文字幕在线观看91| 舔着乳尖日韩一区| 四虎精品在永久在线观看| 国产精品成人一区二区三区吃奶| 欧洲杯半决赛直播| 国产传媒免费观看| 亚洲一级二级在线| 神马久久高清| 国产精品扒开腿做爽爽爽视频| 成人精品亚洲| 999热精品视频| 亚洲成av人片一区二区三区| 色播色播色播色播色播在线| 日韩免费观看网站| 99精品视频在线| 亚洲v在线观看| 色综合久久久久久久久| av电影在线观看| 国产精品手机视频| 久久综合图片| 国产大片免费看| 日韩电视剧免费观看网站| 电影一区电影二区| 小泽玛利亚av在线| 久久久亚洲欧洲日产国码αv| 影音先锋黄色网址| 欧美大片免费看| 一区三区在线欧| 国产不卡的av| 欧美日韩美女在线观看| 麻豆av在线免费看| 久久久久免费网| 国产真实精品久久二三区| 日本中文字幕在线免费观看| 一区二区三区国产视频| 999久久精品| xx欧美撒尿嘘撒尿xx| 亚洲一区视频在线| 在线观看麻豆蜜桃| 精品午夜一区二区三区| 国内成人精品2018免费看| 欧美亚洲精品天堂| 久久99亚洲热视|