日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

讓我們一起聊一聊反射

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

反射的引入

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

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

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

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

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

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

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

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

對基本數據類型反射

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

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

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

【2】代碼:h5L28資訊網——每日最新資訊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)}

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

對結構體類型反射

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

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

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

【2】代碼:h5L28資訊網——每日最新資訊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】獲取變量的類別:兩種方式:h5L28資訊網——每日最新資訊28at.com

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

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

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

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

【3】代碼:h5L28資訊網——每日最新資訊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 的區別h5L28資訊網——每日最新資訊28at.com

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

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

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

通過反射修改變量

修改基本數據類型的值:h5L28資訊網——每日最新資訊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)}

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

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

【1】代碼:(熟知API)h5L28資訊網——每日最新資訊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】代碼:h5L28資訊網——每日最新資訊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學習h5L28資訊網——每日最新資訊28at.com

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

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

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

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

標簽:
  • 熱門焦點
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網上出現了。還是博主數碼閑聊站曝光的,這次的外觀設計還是延續了一加11的方案,只是細節上有了調整,例如新加入了鈦空灰
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • iPhone賣不動了!蘋果股價創年內最大日跌幅:市值一夜蒸發萬億元

    8月5日消息,今天凌晨美股三大指數高開低走集體收跌,道指跌0.41%;納指跌0.36%;標普500指數跌0.52%。熱門科技股也都變化極大,其中蘋果報181.99美元,跌4.8%,創
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • JVM優化:實戰OutOfMemoryError異常

    一、Java堆溢出堆內存中主要存放對象、數組等,只要不斷地創建這些對象,并且保證 GC Roots 到對象之間有可達路徑來避免垃 圾收集回收機制清除這些對象,當這些對象所占空間超過
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應該選擇什么樣的著裝?&rdquo;近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久一区欧美| 亚洲影院免费| 雨宫琴音一区二区在线| 激情综合五月天| 亚洲国产欧美另类丝袜| 亚洲美洲欧洲综合国产一区| 9l国产精品久久久久麻豆| 亚洲午夜极品| 久久精品亚洲乱码伦伦中文 | 国产精品亚洲а∨天堂免在线| 国产精品毛片| 激情综合久久| 一区二区高清在线| 久久精品视频在线看| 欧美成人自拍| 国产乱码精品一区二区三区不卡| 在线免费不卡视频| 欧美日韩国产成人在线免费| 国产欧美日韩视频在线观看| 亚洲高清影视| 亚洲欧美变态国产另类| 美女精品一区| 国产精品欧美精品| 亚洲福利电影| 亚洲男人天堂2024| 乱中年女人伦av一区二区| 欧美午夜大胆人体| 影音先锋亚洲视频| 亚洲一区图片| 欧美国产免费| 国产亚洲电影| 亚洲理伦电影| 久久免费视频在线| 国产精品国产| 亚洲人成高清| 久久久精品国产一区二区三区| 欧美激情中文不卡| 黄色成人在线免费| 小黄鸭精品密入口导航| 欧美精品在线观看一区二区| 国产一区二区三区黄| 夜夜精品视频一区二区| 久久综合色影院| 国产亚洲精品激情久久| 亚洲一区二区不卡免费| 欧美精品三级| 在线观看视频欧美| 欧美一级播放| 国产精品久久久久影院色老大 | 亚洲日本电影| 久久精品99久久香蕉国产色戒| 欧美日韩精品一本二本三本| 亚洲第一精品福利| 久久国产88| 国产精品美女www爽爽爽| 亚洲精选久久| 免费欧美日韩| 在线电影一区| 久久国产乱子精品免费女| 国产精品美女久久久久av超清| 亚洲最新视频在线| 欧美精品一区在线发布| 亚洲国产精品美女| 狂野欧美一区| 伊人成人网在线看| 久久精品国产综合精品| 国产欧美一区二区精品婷婷| 亚洲综合电影| 国产精品成人久久久久| 一道本一区二区| 欧美日韩日日骚| 一本大道久久a久久精二百| 欧美精品久久久久久久久久| 亚洲区在线播放| 欧美韩日一区二区三区| 亚洲欧洲综合另类在线| 欧美激情国产高清| 亚洲欧洲一区二区天堂久久| 欧美99久久| 亚洲啪啪91| 欧美日韩国产综合视频在线观看中文 | 久久女同精品一区二区| 国产一区深夜福利| 久久久久se| 加勒比av一区二区| 老司机午夜精品| 亚洲高清av| 欧美激情精品久久久久久蜜臀 | 亚洲专区欧美专区| 国产精品美女久久久浪潮软件| 亚洲天堂男人| 国产精品狼人久久影院观看方式| 亚洲综合三区| 国产日韩精品一区二区三区在线| 欧美一级网站| 激情伊人五月天久久综合| 两个人的视频www国产精品| 亚洲国产影院| 欧美精品自拍偷拍动漫精品| 一区二区三区四区五区精品视频| 国产精品久久国产愉拍| 欧美亚洲视频一区二区| 国语自产精品视频在线看8查询8| 国产一区二区三区久久悠悠色av | 亚洲老板91色精品久久| 欧美日韩中文精品| 亚洲免费人成在线视频观看| 国产日韩在线一区| 久久综合九九| av成人免费| 国产欧美在线播放| 久久久综合网| 亚洲美女视频| 国产精品综合| 蜜臀91精品一区二区三区| 亚洲青涩在线| 国产精品试看| 久久青草欧美一区二区三区| 亚洲欧洲日本国产| 国产精品美女久久久浪潮软件 | 午夜日本精品| 一区精品在线| 欧美日韩免费一区二区三区视频| 亚洲欧美国产精品专区久久| 狠狠色狠狠色综合人人| 欧美精品久久久久久久久久| 亚洲欧美日韩国产一区二区三区| 在线播放中文一区| 国产精品久久久久久久第一福利| 久久精品女人天堂| 日韩亚洲精品视频| 国产一区再线| 欧美日韩精品在线播放| 欧美自拍偷拍午夜视频| 亚洲精品日本| 国产欧美精品一区二区色综合| 欧美成人午夜剧场免费观看| 亚洲欧美综合v| 最新日韩在线| 国产午夜精品久久久久久免费视 | 国产精品视频xxx| 性欧美xxxx视频在线观看| 亚洲电影毛片| 国产精品自在线| 欧美国产视频一区二区| 亚洲欧美日韩综合国产aⅴ| 亚洲福利视频三区| 国产精品尤物| 欧美日韩国产高清| 久久一区免费| 欧美一区二区三区的| 日韩视频一区二区三区在线播放免费观看| 国产欧美日韩精品丝袜高跟鞋 | 噜噜噜91成人网| 国产视频丨精品|在线观看| 欧美mv日韩mv国产网站app| 亚洲欧美韩国| 亚洲精品中文字| 国内免费精品永久在线视频| 欧美日韩在线亚洲一区蜜芽| 久久免费高清视频| 一区二区三区四区五区精品视频| 精品51国产黑色丝袜高跟鞋| 国产精品免费视频xxxx| 欧美另类高清视频在线| 久久精品国产2020观看福利| 国产精品99久久久久久久vr| 亚洲国产精品专区久久| 国产欧美日韩亚洲精品| 欧美日韩视频免费播放| 免费h精品视频在线播放| 久久国产精品久久久久久电车| 在线一区欧美| 亚洲精品一区二区三区在线观看| 激情视频亚洲| 国产婷婷一区二区| 国产精品黄色| 欧美日韩日韩| 欧美精品偷拍| 女仆av观看一区| 久久久久国产一区二区三区| 亚洲一区图片| aⅴ色国产欧美| 亚洲精品国产精品乱码不99| 国内久久视频| 国产精品影音先锋| 国产精品成人va在线观看| 欧美激情一区二区三区在线| 麻豆成人在线观看| 久久久精品国产99久久精品芒果| 亚洲欧美一区在线| 亚洲一区二区免费视频| 99国产欧美久久久精品| 亚洲人成毛片在线播放女女| 在线观看国产日韩| 在线观看久久av| 一区在线播放视频| 很黄很黄激情成人| 黑人巨大精品欧美黑白配亚洲 | 国产亚洲欧美一区在线观看| 国产精品一区二区三区免费观看| 国产精品久久久久久久久免费| 国产精品va在线播放| 欧美午夜精品伦理|