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

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

一篇學會Go中reflect反射的詳細用法

來源: 責編: 時間:2024-05-11 09:21:05 291觀看
導讀應用場景1.判斷函數變量是否否和標準2.驗證接口值是否合理如(是否為空,傳入的字段是否合規)3.獲取變量的類型進行斷言等操作在Go語言的反射機制中,任何接口值都由是一個具體類型和具體類型的值兩部分組成的(我們在上一篇

應用場景

1.判斷函數變量是否否和標準ZNM28資訊網——每日最新資訊28at.com

2.驗證接口值是否合理如(是否為空,傳入的字段是否合規)ZNM28資訊網——每日最新資訊28at.com

3.獲取變量的類型進行斷言等操作ZNM28資訊網——每日最新資訊28at.com

在Go語言的反射機制中,任何接口值都由是一個具體類型和具體類型的值兩部分組成的(我們在上一篇接口的博客中有介紹相關概念)。 在Go語言中反射的相關功能由內置的reflect包提供,任意接口值在反射中都可以理解為由reflect.Type和reflect.Value兩部分組成,并且reflect包提供了reflect.TypeOf和reflect.ValueOf兩個函數來獲取任意對象的Value和Type。ZNM28資訊網——每日最新資訊28at.com

1.結構體中使用反射

  • 獲取 2 種類型信息的方法:

reflect.TypeOf() 獲取類型信息,返回 Type 類型;ZNM28資訊網——每日最新資訊28at.com

reflect.ValueOf() 獲取數據信息,返回 Value 類型。ZNM28資訊網——每日最新資訊28at.com

反射中值的可設置性,可以用 CanSet 方法來判斷值是否可以設置。在 Go 中,函數參數的傳遞都是值拷貝,在反射中要修改值,必須傳遞指針,并且用 Elem() 方法獲取指針的值,然后進行修改。
ZNM28資訊網——每日最新資訊28at.com

reflect.ValueOf() 返回的 Value 類型:

  • 它有一個 Type() 方法,返回的是 reflect.Value 的 Type
  • 它有獲取 Value 類型值的方法如果我們知道是 float 類型,所以直接用 Float() 方法。如果不知道具體類型呢?由上面例子可知用 Interface() 方法,然后在進行類型斷言 v.Interface().(float64) 來判斷獲取值

v.Kind() 和 v.Type() 區別:

在 type MyInt int 里,v.Kind() 與 v.Type() 返回了不同的類型值,Kind()返回的是 int,Type() 返回的是 MyInt。在 Go 中,可以用 type 關鍵字定義自定義類型,Kind() 方法返回底層類型。比如還有結構體,指針等類型用 type 定義的,那么 Kind() 方法就可以獲取這些類型的底層類型。ZNM28資訊網——每日最新資訊28at.com

案例使用方法

package mainimport (	"fmt"	"reflect")type Userinfo struct {	Age      int `id:"iloveyou" num:"222"` //tag標簽信息	UserName string}func GetReflickInfo(i interface{}) {	vl := reflect.ValueOf(i)	//nii := 200	fmt.Println("kind ======", vl.Kind())	if vl.Kind() == reflect.Ptr { //如是指針類型,先取值		vl = vl.Elem() //Elem方法就是取值操作	}	vlt := vl.Type() //獲取具體類型,如自定義結構體的類型	fmt.Println("kind ======type===", vl.Kind(), vlt)	if vl.Kind() != reflect.Struct {		fmt.Println("類型:", vlt, " 名字:", vlt.Name(), " 數值:", vl)		//如是整數種類,又可以修改,CanSet屬性為true,則進行修改。		if vl.Kind() == reflect.Int || vl.Kind() == reflect.Int64 && vl.CanSet() {			vl.SetInt(100)			//reflect.New(vlt)是創建了一個vlt類型的指針變量。			ni := reflect.New(vlt)			//創建后的ni是reflect.Value對象,需要通過ValueOf來賦值			ni = reflect.ValueOf(222)			fmt.Println("修改后int數值:", vl, "新建數值:", ni)		}		//如是浮點數種類,又可以修改,CanSet屬性為true,則進行修改。		//可設置性檢查:vl.CanSet() 是一個方法,用于確認vl的值是否可以被修改。在Go中,不是所有的反射值都能被設置,比如函數參數或者某些靜態類型就不能。如果vl的值可以被改變,CanSet()將返回true。		if vl.Kind() == reflect.Float32 || vl.Kind() == reflect.Float64 && vl.CanSet() {			vl.SetFloat(100.11) //調用vl.SetFloat(100.11)方法將變量vl的值設置為100.11。			fmt.Println("修改后float數值:", vl)		}	} else {		fmt.Println("結構體類型:", vlt, " 名字:", vlt.Name())		for i := 0; i < vl.NumField(); i++ {			//vl是具體的值,這里vl.Field(i)就是枚舉出每一個成員的值			//vlt是獲取的類型,vlt.Field(i).Name和.Type是枚舉出每一個成員的名字和類型			//也可以使用FieldByName,從指定的成員名獲取具體值,vlret:= vl.FieldByName(vlt.Field(i).Name)			fmt.Println("成員名:", vlt.Field(i).Name, " 類型:", vlt.Field(i).Type, " 數值:", vl.Field(i))			//如是字符串種類,又可以修改,CanSet屬性為true,則進行修改。			if vl.Field(i).Kind() == reflect.String && vl.Field(i).CanSet() {				vl.Field(i).SetString("new str")				fmt.Println("string成員修改后數值:", vl.Field(i))			}			//而tag標簽信息都是靜態的,無須實例化結構體,通過類型vlt可以獲取到。			//這句vlt.Field(i).Tag.Lookup("id")就是枚舉出每一個成員的tag標簽,看里面是否有id這個key,并返回它的value值			if idtag, b := vlt.Field(i).Tag.Lookup("id"); b {				fmt.Println("tag id=", idtag)			}			if numtag, b := vlt.Field(i).Tag.Lookup("num"); b {				fmt.Println("tag num=", numtag)			}		}	}}func main() {	var price float64 = 3.14	var age int64 = 5	bd := Userinfo{100, "andy"}	ns := struct { //定義一個無名結構體		id   int		addr string	}{2, "aa"}	GetReflickInfo(price)	GetReflickInfo(&age) //把變量地址傳遞,所以可以修改。	GetReflickInfo(&bd)  //把結構體地址傳遞,所以可以修改。	fmt.Println(bd)      //打印出修改后的結構體變量	GetReflickInfo(ns)}


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

本文鏈接:http://m.www897cc.com/showinfo-26-87989-0.html一篇學會Go中reflect反射的詳細用法

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

上一篇: 深入理解分布式鎖:原理、應用與挑戰

下一篇: 一圖看懂 React 源碼中的同步更新邏輯

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品一区二区三区成人| 亚洲三级性片| 欧美日韩在线一区| 欧美日韩精品免费观看视频| 欧美日韩国产一中文字不卡 | 久久天堂成人| 久久香蕉精品| 欧美日本亚洲| 国产精品视频专区| 精品91在线| 99热在这里有精品免费| 性刺激综合网| 欧美大片国产精品| 国产精品国产一区二区| 国产精品久久久久久久久久尿| 欧美日韩美女一区二区| 国产精品女人久久久久久| 欧美大片18| 一本色道久久综合亚洲精品不 | 欧美一级黄色录像| 欧美日韩亚洲视频| 亚洲国产女人aaa毛片在线| 亚洲国产精选| 亚洲一级片在线观看| 黄色成人在线观看| 国产精品嫩草99av在线| 国产欧美一区二区精品忘忧草| 欧美精品在线一区| 亚洲欧美日韩视频一区| 国产视频在线观看一区二区三区 | 欧美丝袜一区二区| 国产丝袜美腿一区二区三区| 亚洲精品国产精品国自产在线| 欧美日韩视频第一区| 国产精品手机视频| 激情久久久久久久久久久久久久久久| 亚洲日本va午夜在线影院| 性刺激综合网| 欧美日韩免费高清| 激情综合色综合久久| 亚洲欧美日本另类| 欧美高清不卡在线| 国产欧美精品国产国产专区| 亚洲国产免费看| 亚洲视频在线观看一区| 久久亚洲私人国产精品va媚药 | 亚洲亚洲精品在线观看| 国产亚洲欧美aaaa| 一本色道久久综合亚洲二区三区| 久久久av水蜜桃| 国产精品视频免费| 夜夜嗨av一区二区三区中文字幕| 老**午夜毛片一区二区三区| 国产精品午夜av在线| 一区二区三区视频在线观看| 欧美aaaaaaaa牛牛影院| 国产一区二区三区网站| 亚洲欧美在线免费| 欧美午夜精品理论片a级大开眼界| 亚洲国产成人精品久久久国产成人一区| 午夜精品剧场| 国产精品国产三级国产普通话蜜臀| 亚洲精品国精品久久99热| 媚黑女一区二区| 国产亚洲欧美一区在线观看| 亚洲综合二区| 欧美日韩美女在线观看| 亚洲国产美女精品久久久久∴| 久久九九电影| 国产视频综合在线| 亚洲欧美制服另类日韩| 欧美日韩中文字幕在线视频| 亚洲国产精品久久久久婷婷老年| 久久久av水蜜桃| 韩国免费一区| 性做久久久久久| 国产精品视频| 在线综合亚洲欧美在线视频| 欧美大片在线看免费观看| 在线看片欧美| 久久精品系列| 精品成人一区| 久久嫩草精品久久久久| 好吊色欧美一区二区三区四区| 欧美一区二区在线看| 国产精品区二区三区日本| 亚洲一级黄色片| 国产精品伊人日日| 亚洲伊人一本大道中文字幕| 欧美日韩国产探花| 美女视频一区免费观看| 欧美欧美全黄| 亚洲日本成人| 欧美成人一区二区在线| 亚洲大胆女人| 另类欧美日韩国产在线| 伊人成年综合电影网| 欧美xx视频| 一区二区三区|亚洲午夜| 欧美日韩蜜桃| 午夜精彩国产免费不卡不顿大片| 国产欧美欧美| 欧美亚洲网站| 尤物yw午夜国产精品视频| 麻豆成人小视频| 亚洲日本成人在线观看| 欧美日韩精品欧美日韩精品一| 亚洲婷婷国产精品电影人久久| 国产精品久久久久久久久久久久久 | 久久天天综合| 亚洲精品美女在线| 欧美三级中文字幕在线观看| 亚洲一区成人| 国产日产高清欧美一区二区三区| 久久精品国产成人| 亚洲韩国日本中文字幕| 欧美另类亚洲| 亚洲一区二区精品在线观看| 国产伦精品一区二区| 亚洲欧美在线播放| 国产午夜精品视频| 久久青草久久| 亚洲激情视频在线| 国产精品国产| 久久久久免费| 亚洲精品久久视频| 国产精品色午夜在线观看| 久久婷婷丁香| 一区二区三区欧美在线| 国产亚洲精品v| 欧美成人一区二区三区| 亚洲在线第一页| 国内欧美视频一区二区| 欧美激情一区二区三区在线视频 | 亚洲欧美综合v| 国产最新精品精品你懂的| 欧美黑人在线播放| 欧美有码视频| 亚洲精品美女在线观看| 国产精品一区二区黑丝| 牛牛影视久久网| 久久免费少妇高潮久久精品99| 日韩视频中午一区| 欧美午夜宅男影院| 久久精品国产成人| 亚洲国产一区在线| 国产精品视频免费一区| 免费黄网站欧美| 中文国产亚洲喷潮| 激情欧美一区二区三区| 欧美日韩国产精品专区| 久久久国产91| 一区二区国产精品| 国产日韩av高清| 欧美日韩精品久久| 久久久久久久尹人综合网亚洲 | 亚洲欧洲免费视频| 国产偷自视频区视频一区二区| 欧美大片在线影院| 午夜精品偷拍| 亚洲伦理久久| 在线成人小视频| 国产精品嫩草影院一区二区| 欧美专区日韩专区| 中文国产成人精品久久一| 怡红院av一区二区三区| 国产精品vvv| 欧美激情成人在线| 欧美在线你懂的| 亚洲视频在线视频| 亚洲黄色免费网站| 国产日韩在线不卡| 亚洲欧美一区二区三区久久| 国产精品ⅴa在线观看h| 欧美大成色www永久网站婷| 欧美在线二区| 亚洲丝袜av一区| 亚洲区在线播放| 亚洲高清123| 国产视频在线观看一区二区三区| 欧美日韩在线影院| 美女黄毛**国产精品啪啪 | 亚洲视频网在线直播| 亚洲精品久久久久久下一站| 影音先锋在线一区| 国产一级揄自揄精品视频| 国产精品夜夜嗨| 国产精品久久久一区二区三区| 欧美精品一区二区三区很污很色的| 久久―日本道色综合久久| 久久精品在这里| 久久国产精品久久久久久电车| 午夜视频久久久| 午夜欧美大尺度福利影院在线看| 亚洲欧洲av一区二区| 午夜在线精品| 一区二区黄色| 亚洲视频大全| 亚洲一区二区av电影| 亚洲一区高清| 午夜宅男久久久| 欧美在线观看一区| 欧美与黑人午夜性猛交久久久| 亚洲欧洲精品一区二区三区波多野1战4 |