国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

讓我們一起聊一聊反射

來源: 責編: 時間:2023-08-14 22:01:00 420觀看
導讀反射的引入【1】反射可以做什么?1) 反射可以在運行時動態獲取變量的各種信息,比如變量的類型,類別等信息2) 如果是結構體變量,還可以獲取到結構體本身的信息(包括結構體的字段、方法)3) 通過反射,可以修改變量的值,可以調用

反射的引入

【1】反射可以做什么?E2a28資訊網——每日最新資訊28at.com

1) 反射可以在運行時動態獲取變量的各種信息,比如變量的類型,類別等信息E2a28資訊網——每日最新資訊28at.com

2) 如果是結構體變量,還可以獲取到結構體本身的信息(包括結構體的字段、方法)E2a28資訊網——每日最新資訊28at.com

3) 通過反射,可以修改變量的值,可以調用關聯的方法。E2a28資訊網——每日最新資訊28at.com

4) 使用反射,需要import ("reflect")E2a28資訊網——每日最新資訊28at.com

【2】反射相關的函數E2a28資訊網——每日最新資訊28at.com

1) reflect.TypeOf(變量名),獲取變量的類型,.Type類型E2a28資訊網——每日最新資訊28at.com

2) reflect.ValueOf(變量名),獲取變量的值,返回reflect.Value類型(reflect.Value是一個結構體類型),通過reflect.Value,可以獲取到關于該變量的很多信息。E2a28資訊網——每日最新資訊28at.com

對基本數據類型反射

【1】反射相關的函數E2a28資訊網——每日最新資訊28at.com

1) reflect.TypeOf(變量名),獲取變量的類型,返回reflect.Type類型E2a28資訊網——每日最新資訊28at.com

2) reflect.ValueOf(變量名),獲取變量的值,返回reflect.Value類型(reflect.Value是一個結構體類型),通過reflect.Value,可以獲取到關于該變量的很多信息。E2a28資訊網——每日最新資訊28at.com

【2】代碼:E2a28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"reflect")//利用一個函數,函數的參數定義為空接口://空接口沒有任何方法,所以可以理解為所有類型都實現了空接口,也可以理解為我們可以把任何一個變量賦給空接口。func testReflect(i interface{})  {	//1.調用TypeOf函數,返回reflect.Type類型數據:	reType := reflect.TypeOf(i)	fmt.Println("reType:",reType)	fmt.Printf("reType的具體類型是:%T /n",reType)	//2.調用ValueOf函數,返回reflect.Value類型數據:	reValue := reflect.ValueOf(i)	fmt.Println("reValue",reValue)	fmt.Printf("reValue的具體類型是:%T /n",reValue)	// num1 := 100	//如果真想獲取reValue的數值,要調用Int()方法:返回v持有的有符號整數	num2 := 80 + reValue.Int()	fmt.Println(num2)	//reValue轉成空接口:	i2 := reValue.Interface()	n := i2.(int)	n2 := n + 30	fmt.Println(n2)}func main()  {	var num int = 100;	testReflect(num)}

E2a28資訊網——每日最新資訊28at.com

對結構體類型反射

【1】反射相關的函數E2a28資訊網——每日最新資訊28at.com

1) reflect.TypeOf(變量名),獲取變量的類型,返回reflect.Type類型E2a28資訊網——每日最新資訊28at.com

2) reflect.ValueOf(變量名),獲取變量的值,返回reflect.Value類型(reflect.Value是一個結構體類型),通過reflect.Value,可以獲取到關于該變量的很多信息。E2a28資訊網——每日最新資訊28at.com

【2】代碼:E2a28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"reflect")//利用一個函數,函數的參數定義為空接口://空接口沒有任何方法,所以可以理解為所有類型都實現了空接口,也可以理解為我們可以把任何一個變量賦給空接口。func testReflect(i interface{})  {	//1.調用TypeOf函數,返回reflect.Type類型數據:	reType := reflect.TypeOf(i)	fmt.Println("reType:",reType)	fmt.Printf("reType的具體類型是:%T /n",reType)	//2.調用ValueOf函數,返回reflect.Value類型數據:	reValue := reflect.ValueOf(i)	fmt.Println("reValue",reValue)	fmt.Printf("reValue的具體類型是:%T /n",reValue)	// num1 := 100	//如果真想獲取reValue的數值,要調用Int()方法:返回v持有的有符號整數	num2 := 80 + reValue.Int()	fmt.Println(num2)	//reValue轉成空接口:	i2 := reValue.Interface()	n := i2.(int)	n2 := n + 30	fmt.Println(n2)}func main()  {	var num int = 100;	testReflect(num)}

獲取變量的類別

【1】獲取變量的類別:兩種方式:E2a28資訊網——每日最新資訊28at.com

(1)reflect.Type.Kind()E2a28資訊網——每日最新資訊28at.com

(2)reflect.Value.Kind()E2a28資訊網——每日最新資訊28at.com

【2】Kind的值是常量值:E2a28資訊網——每日最新資訊28at.com

E2a28資訊網——每日最新資訊28at.com

【3】代碼:E2a28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"reflect")type Student struct {	Name string	Age int}func testReflect(i interface{})  {	reType := reflect.TypeOf(i)	reValue := reflect.ValueOf(i)	//獲取變量的類別:	//(1)reType.Kind()	k1 := reType.Kind()	fmt.Println(k1)	//(2)reValue.Kind()	k2 := reValue.Kind()	fmt.Println(k2)	//獲取變量的類型:	i2 := reValue.Interface()	n,flag := i2.(Student)	if flag == true {		fmt.Printf("結構體的類型是:%T",n)	}}func main()  {	stu := Student{		Name: "菜園子",		Age: 18,	}	testReflect(stu)}

【4】Type和 Kind 的區別E2a28資訊網——每日最新資訊28at.com

Type是類型, Kind是類別,Type和Kind 可能是相同的,也可能是不同的.E2a28資訊網——每日最新資訊28at.com

比如:var num int = 10 num的Type是int , Kind也是intE2a28資訊網——每日最新資訊28at.com

比如:var stu Studentstu的 Type是 pkg1.Student , Kind是structE2a28資訊網——每日最新資訊28at.com

通過反射修改變量

修改基本數據類型的值:E2a28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"reflect")func testReflect(i interface{})  {	reValue := reflect.ValueOf(i)	//通過SetInt()來改變值:	reValue.Elem().SetInt(50)}func main()  {	var num int = 100	//傳入指針地址	testReflect(&num)	fmt.Println(num)}

E2a28資訊網——每日最新資訊28at.com

通過反射操作結構體的屬性和方法

【1】代碼:(熟知API)E2a28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"reflect")type Student struct {	Name string	Age int}//給結構體綁定方法:func (s Student) Print()  {	fmt.Println("調用了Print()方法")	fmt.Println("學生的名字是:",s.Name)}func (s Student) GetSum(n1,n2 int) int{	fmt.Println("調用了GetSum()方法")	return n1 + n2}func (s Student) Set(name string,age int)  {	s.Name = name	s.Age = age}//定義函數操作結構體進行反射操作:func TestStudentStruct(a interface{})  {	//a轉成reflect.Value類型:	val := reflect.ValueOf(a)	fmt.Println(val)	//通過reflect.Value類型操作結構體內部的字段:	n1 := val.NumField()	fmt.Println(n1)	//遍歷-獲取具體的字段:	for i := 0; i < n1; i++ {		fmt.Printf("第%d個字段的值是:%v /n",i+1,val.Field(i))	}	//通過reflect.Value類型操作結構體內部的方法:	n2 := val.NumMethod()	fmt.Println(n2)	//調用Print()方法:	//調用方法,方法的首字母必須大寫才能有對應的反射的訪問權限    //方法的順序按照ASCII的順序排列的,a,b,c,,,,,,索引:0,1,2,,,	val.Method(1).Call(nil)	//調用GetSum方法:	//定義Value的切片:	var params []reflect.Value	params = append(params,reflect.ValueOf(10))	params = append(params,reflect.ValueOf(20))	result := val.Method(0).Call(params)	fmt.Println("GetSum方法的返回值是:",result[0].Int())}func main()  {	stu := Student{		Name: "菜園子",		Age: 19,	}	TestStudentStruct(stu)}

通過反射修改變量

【1】代碼:E2a28資訊網——每日最新資訊28at.com

package mainimport (	"fmt"	"reflect")type Student struct{	Name string	Age int}func (s Student) Print() {	fmt.Println("調用了Print()方法")	fmt.Println("學生的姓名是:",s.Name)}func (s Student) GetSum(n1,n2 int) int {	fmt.Println("調用了GetSum()方法")	return n1 + n2}func (s Student) Set(name string,age int)  {	s.Name = name	s.Age = age}func TestReflectStuct(a interface{})  {	//a轉成reflect.Value類型:	val := reflect.ValueOf(a)	fmt.Println(val)	n := val.Elem().NumField()	fmt.Println(n)	//修改字段的值:	val.Elem().Field(0).SetString("Idea")}func main()  {	stu := Student {		Name: "菜園子",		Age: 19,	}	TestReflectStuct(&stu)	fmt.Println(stu)}

參考源碼:golang-demo: golang學習E2a28資訊網——每日最新資訊28at.com

本文鏈接:http://m.rrqrq.com/showinfo-26-5713-0.html讓我們一起聊一聊反射

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 用了Go匿名結構體,搬磚效率更高,產量更足了

下一篇: 警惕 C++ 中的隱式類型轉換

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機潮已經過去,最明顯的肯定就是大內存和存儲的機型了,另外部分中端機也取消了屏幕塑料支架
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • WebRTC.Net庫開發進階,教你實現屏幕共享和多路復用!

    WebRTC.Net庫:讓你的應用更親民友好,實現視頻通話無痛接入! 除了基本用法外,還有一些進階用法可以更好地利用該庫。自定義 STUN/TURN 服務器配置WebRTC.Net 默認使用 Google 的
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 華為發布HarmonyOS 4:更好玩、更流暢、更安全

    在8月4日的華為開發者大會2023(HDC.Together)大會上,HarmonyOS 4正式發布。自2019年發布以來,HarmonyOS一直以用戶為中心,經歷四年多的發展HarmonyOS已
  • iQOO 11S新品發布會

    iQOO將在7月4日19:00舉行新品發布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
亚洲电影一区二区| 亚洲裸体俱乐部裸体舞表演av| 亚洲国产精品一区二区久久 | 国产精品国产亚洲精品看不卡15| fc2成人免费人成在线观看播放| 国内不卡的二区三区中文字幕| 麻豆精品视频在线观看视频| 六月丁香婷婷色狠狠久久| 日韩电影在线一区| 极品瑜伽女神91| 大美女一区二区三区| 成人一二三区视频| 91香蕉国产在线观看软件| 欧美激情综合色综合啪啪| 欧美成人69| 日韩亚洲国产精品| 久久青草久久| 欧美三级在线播放| 精品日韩一区二区| 国产日韩欧美一区二区三区综合| 中文字幕av一区二区三区高| 亚洲欧美一区二区三区久本道91 | 欧美日韩精品免费观看视一区二区 | 欧美天堂亚洲电影院在线播放| 欧美在线看片a免费观看| 欧美久久久久中文字幕| 精品免费一区二区三区| 国产精品女同互慰在线看| 亚洲精品成人天堂一二三| 亚洲综合av网| 九九热在线视频观看这里只有精品| 国产精品自在在线| 欧美一区国产一区| 国产精品视频久久一区| 欧美日韩一区二区三区在线 | 国产精品久久久久7777按摩| 亚洲成a天堂v人片| 国产乱对白刺激视频不卡| 欧美在线看片| 先锋a资源在线看亚洲| 久久久影院官网| 亚洲欧美综合网| 免费人成黄页网站在线一区二区| 不卡在线观看av| 国产欧美一区二区视频| 欧美一区二区三区影视| 国产精品久久久久精k8| 久久精品国产精品亚洲精品| 欧美日韩a区| 欧美在线高清视频| 国产精品女上位| 国产一区二区三区| 最新亚洲激情| 精品国产青草久久久久福利| 亚洲国产综合色| 91一区二区三区在线播放| 久久精品五月婷婷| 中文字幕久久午夜不卡| 经典三级一区二区| 一本一本a久久| 久久久久青草大香线综合精品| 五月天丁香久久| 欧美三级小说| 精品区一区二区| 午夜在线成人av| 伊人精品在线| 亚洲精品在线免费播放| 六月婷婷色综合| 免费视频一区| 日韩理论片网站| 91丨porny丨在线| 91精品一区二区三区久久久久久| 亚洲激情图片小说视频| 欧美大片专区| 日韩欧美激情一区| 美腿丝袜亚洲综合| 亚洲一区二区伦理| 综合激情成人伊人| 91热门视频在线观看| 日韩一级欧美一级| 精品一区二区三区的国产在线播放 | 91在线视频网址| 91麻豆精品国产自产在线| 日韩av中文在线观看| 国产伦精品一区二区三区视频孕妇 | 国产精品乱子乱xxxx| 国产精品国产a级| 91亚洲永久精品| 精品国偷自产国产一区| 国产成人免费在线观看不卡| 欧美这里有精品| 日本中文在线一区| 一本一本大道香蕉久在线精品| 亚洲人123区| 一本久久综合| 亚洲黄色片在线观看| 在线视频成人| 亚洲人成在线观看一区二区| 狠狠色丁香久久综合频道| 国产日韩三级在线| 欧美日韩91| 日韩美女视频19| 欧美日韩在线播放三区四区| 蜜桃一区二区三区四区| 色国产精品一区在线观看| 午夜视频在线观看一区二区三区| 性色av一区二区怡红| 午夜国产不卡在线观看视频| 免费在线成人| 青椒成人免费视频| 欧美日韩国产综合一区二区| 国产美女久久久久| 精品国产青草久久久久福利| 99精品国产一区二区三区不卡| 精品成人免费观看| 亚洲欧美一区二区原创| 亚洲视频在线一区观看| 午夜亚洲精品| 日本成人在线看| 欧美日韩dvd在线观看| 国产成人亚洲综合a∨婷婷图片| 日韩女优毛片在线| 狠狠爱www人成狠狠爱综合网| 亚洲欧美日韩久久| 91极品视觉盛宴| 粉嫩aⅴ一区二区三区四区五区| 国产亚洲短视频| 国产欧美日韩一区| 精品在线观看免费| 久久久美女毛片| 91久久精品www人人做人人爽| 香蕉加勒比综合久久| 欧美一区二区三区电影| 欧美日韩综合精品| 亚洲成人一区在线| 这里只有精品电影| 狠狠色丁香久久综合频道| 视频在线观看国产精品| 精品日韩一区二区三区免费视频| 亚洲香蕉视频| 男男视频亚洲欧美| 精品久久久久久最新网址| 在线日韩av| 国产二区国产一区在线观看| 国产精品天美传媒| 欧洲中文字幕精品| 欧美精品综合| 捆绑调教美女网站视频一区| 国产日韩av一区二区| 色噜噜久久综合| 色综合久久中文综合久久97| 五月婷婷激情综合网| 久久久美女艺术照精彩视频福利播放| 中文精品在线| gogogo免费视频观看亚洲一| 亚洲观看高清完整版在线观看 | 国产在线播精品第三| 综合久久给合久久狠狠狠97色| 欧美三级资源在线| 亚洲三级影院| 99久久精品免费看国产免费软件| 亚洲图片自拍偷拍| 国产日产亚洲精品系列| 欧美挠脚心视频网站| 91精品国产综合久久久蜜臀粉嫩| 国模一区二区三区| 国产麻豆精品一区二区| 亚洲在线视频网站| 国产午夜精品在线观看| 欧美日韩国产综合一区二区 | 久久激情中文| 欧美午夜精品理论片a级大开眼界| 九九在线精品视频| 亚洲成人免费视频| 亚洲欧美偷拍卡通变态| 精品国产精品一区二区夜夜嗨| 欧美在线看片a免费观看| 在线视频精品一区| 欧美午夜精品久久久久免费视| 丁香五精品蜜臀久久久久99网站| 石原莉奈在线亚洲三区| 亚洲欧美福利一区二区| 国产日韩精品一区二区三区| 日韩免费福利电影在线观看| 在线观看av不卡| 色婷婷亚洲一区二区三区| 亚洲韩日在线| 欧美性大战久久久久| 91免费版在线看| www.爱久久.com| 国产黄人亚洲片| 国产精品中文字幕日韩精品| 亚洲一区二区成人| 国产免费成人| 国产精品夜夜夜一区二区三区尤| 狠狠噜噜久久| 影音先锋久久| 一区二区三区成人精品| 99香蕉国产精品偷在线观看 | 中文字幕亚洲在|