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

一篇學(xué)會(huì)Go中reflect反射的詳細(xì)用法

開發(fā) 前端
在Go語(yǔ)言的反射機(jī)制中,任何接口值都由是一個(gè)具體類型和具體類型的值兩部分組成的(我們?cè)谏弦黄涌诘牟┛椭杏薪榻B相關(guān)概念)。

應(yīng)用場(chǎng)景

1.判斷函數(shù)變量是否否和標(biāo)準(zhǔn)

2.驗(yàn)證接口值是否合理如(是否為空,傳入的字段是否合規(guī))

3.獲取變量的類型進(jìn)行斷言等操作

在Go語(yǔ)言的反射機(jī)制中,任何接口值都由是一個(gè)具體類型和具體類型的值兩部分組成的(我們?cè)谏弦黄涌诘牟┛椭杏薪榻B相關(guān)概念)。 在Go語(yǔ)言中反射的相關(guān)功能由內(nèi)置的reflect包提供,任意接口值在反射中都可以理解為由reflect.Type和reflect.Value兩部分組成,并且reflect包提供了reflect.TypeOf和reflect.ValueOf兩個(gè)函數(shù)來(lái)獲取任意對(duì)象的Value和Type。

1.結(jié)構(gòu)體中使用反射

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

reflect.TypeOf() 獲取類型信息,返回 Type 類型;

reflect.ValueOf() 獲取數(shù)據(jù)信息,返回 Value 類型。

反射中值的可設(shè)置性,可以用 CanSet 方法來(lái)判斷值是否可以設(shè)置。在 Go 中,函數(shù)參數(shù)的傳遞都是值拷貝,在反射中要修改值,必須傳遞指針,并且用 Elem() 方法獲取指針的值,然后進(jìn)行修改。

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

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

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

在 type MyInt int 里,v.Kind() 與 v.Type() 返回了不同的類型值,Kind()返回的是 int,Type() 返回的是 MyInt。在 Go 中,可以用 type 關(guān)鍵字定義自定義類型,Kind() 方法返回底層類型。比如還有結(jié)構(gòu)體,指針等類型用 type 定義的,那么 Kind() 方法就可以獲取這些類型的底層類型。

案例使用方法

package main

import (
	"fmt"
	"reflect"
)

type Userinfo struct {
	Age      int `id:"iloveyou" num:"222"` //tag標(biāo)簽信息
	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() //獲取具體類型,如自定義結(jié)構(gòu)體的類型
	fmt.Println("kind ======type===", vl.Kind(), vlt)
	if vl.Kind() != reflect.Struct {
		fmt.Println("類型:", vlt, " 名字:", vlt.Name(), " 數(shù)值:", vl)
		//如是整數(shù)種類,又可以修改,CanSet屬性為true,則進(jìn)行修改。
		if vl.Kind() == reflect.Int || vl.Kind() == reflect.Int64 && vl.CanSet() {
			vl.SetInt(100)
			//reflect.New(vlt)是創(chuàng)建了一個(gè)vlt類型的指針變量。
			ni := reflect.New(vlt)
			//創(chuàng)建后的ni是reflect.Value對(duì)象,需要通過(guò)ValueOf來(lái)賦值
			ni = reflect.ValueOf(222)
			fmt.Println("修改后int數(shù)值:", vl, "新建數(shù)值:", ni)
		}
		//如是浮點(diǎn)數(shù)種類,又可以修改,CanSet屬性為true,則進(jìn)行修改。
		//可設(shè)置性檢查:vl.CanSet() 是一個(gè)方法,用于確認(rèn)vl的值是否可以被修改。在Go中,不是所有的反射值都能被設(shè)置,比如函數(shù)參數(shù)或者某些靜態(tài)類型就不能。如果vl的值可以被改變,CanSet()將返回true。
		if vl.Kind() == reflect.Float32 || vl.Kind() == reflect.Float64 && vl.CanSet() {
			vl.SetFloat(100.11) //調(diào)用vl.SetFloat(100.11)方法將變量vl的值設(shè)置為100.11。
			fmt.Println("修改后float數(shù)值:", vl)
		}
	} else {
		fmt.Println("結(jié)構(gòu)體類型:", vlt, " 名字:", vlt.Name())
		for i := 0; i < vl.NumField(); i++ {
			//vl是具體的值,這里vl.Field(i)就是枚舉出每一個(gè)成員的值
			//vlt是獲取的類型,vlt.Field(i).Name和.Type是枚舉出每一個(gè)成員的名字和類型
			//也可以使用FieldByName,從指定的成員名獲取具體值,vlret:= vl.FieldByName(vlt.Field(i).Name)
			fmt.Println("成員名:", vlt.Field(i).Name, " 類型:", vlt.Field(i).Type, " 數(shù)值:", vl.Field(i))
			//如是字符串種類,又可以修改,CanSet屬性為true,則進(jìn)行修改。
			if vl.Field(i).Kind() == reflect.String && vl.Field(i).CanSet() {
				vl.Field(i).SetString("new str")
				fmt.Println("string成員修改后數(shù)值:", vl.Field(i))
			}
			//而tag標(biāo)簽信息都是靜態(tài)的,無(wú)須實(shí)例化結(jié)構(gòu)體,通過(guò)類型vlt可以獲取到。
			//這句vlt.Field(i).Tag.Lookup("id")就是枚舉出每一個(gè)成員的tag標(biāo)簽,看里面是否有id這個(gè)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 { //定義一個(gè)無(wú)名結(jié)構(gòu)體
		id   int
		addr string
	}{2, "aa"}
	GetReflickInfo(price)
	GetReflickInfo(&age) //把變量地址傳遞,所以可以修改。
	GetReflickInfo(&bd)  //把結(jié)構(gòu)體地址傳遞,所以可以修改。
	fmt.Println(bd)      //打印出修改后的結(jié)構(gòu)體變量
	GetReflickInfo(ns)
}


責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-08-12 07:49:24

SQL遞歸用法

2022-05-17 08:02:55

GoTryLock模式

2021-07-16 22:43:10

Go并發(fā)Golang

2022-06-09 08:41:17

Go網(wǎng)絡(luò)庫(kù)Gnet

2021-04-30 09:04:11

Go 語(yǔ)言結(jié)構(gòu)體type

2023-12-05 07:14:27

AIGo

2021-11-15 10:29:39

Go語(yǔ)言類型

2020-12-31 09:06:44

Go語(yǔ)言Reflect

2022-01-02 08:43:46

Python

2022-02-07 11:01:23

ZooKeeper

2021-04-20 06:12:09

Swift 反射 Mirror反射機(jī)制

2021-08-01 07:19:16

語(yǔ)言OpenrestyNginx

2022-06-30 22:53:18

數(shù)據(jù)結(jié)構(gòu)算法

2021-10-26 10:40:26

代理模式虛擬

2021-12-04 22:05:02

Linux

2022-03-01 08:31:37

volatile變量編譯器

2021-07-06 08:59:18

抽象工廠模式

2023-11-28 08:29:31

Rust內(nèi)存布局

2023-01-03 08:31:54

Spring讀取器配置

2021-07-02 09:45:29

MySQL InnoDB數(shù)據(jù)
點(diǎn)贊
收藏

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

国产精品高潮在线| 日韩精品免费综合视频在线播放 | 国产无遮挡裸体免费久久| 亚洲天堂2014| 九色91视频| 91tv国产成人福利| 亚洲少妇诱惑| 久久久999成人| 午夜av免费看| 国产精品.xx视频.xxtv| 一卡二卡欧美日韩| 日本不卡久久| 亚洲精品久久久蜜桃动漫| 日韩高清在线观看| 色综合老司机第九色激情| 中文字幕第20页| 亚洲精品v亚洲精品v日韩精品| 欧美午夜片在线免费观看| 亚洲国产精品视频一区| 黄片毛片在线看| 麻豆国产精品官网| 欧美在线一级视频| 麻豆一区产品精品蜜桃的特点| 欧美美女在线| 日韩av在线看| av影片在线播放| 人人精品久久| 91国产免费观看| 久久精品99国产精品酒店日本| 岛国精品一区二区三区| 国产成+人+综合+亚洲欧美| 无码av免费一区二区三区试看| 中文字幕免费高| 成人性生交大片免费看午夜| a级高清视频欧美日韩| 亚洲一区二区三区xxx视频| 久久久精品毛片| 国产日韩欧美一区二区三区在线观看| 美女啪啪无遮挡免费久久网站| 国产午夜福利一区| 国产毛片一区二区三区| 日韩av在线一区| 日本一区二区在线观看视频| 成人短视频软件网站大全app| 色激情天天射综合网| 阿v天堂2017| av蜜臀在线| 亚洲在线视频网站| 999久久欧美人妻一区二区| a视频在线观看| 日韩一区在线看| 性欧美18一19内谢| 日本黄色片在线观看| 国产精品久久久久影院色老大 | 欧美xxxx中国| 中文字幕免费精品一区| 自拍偷拍你懂的| 色喇叭免费久久综合网| 日韩亚洲第一页| 777777国产7777777| 亚洲成av人片一区二区密柚| 久久在精品线影院精品国产| 成人涩涩小片视频日本| 欧美大片一区| 国语自产精品视频在线看抢先版图片| 日产精品久久久久久久| 国产精品婷婷| 国产91久久婷婷一区二区| 在线观看污污网站| 麻豆精品蜜桃视频网站| 91中文在线观看| 亚洲乱码国产乱码精品精软件| 国产91丝袜在线播放0| 国产一区国产精品| 欧美日韩视频精品二区| 欧美激情一区二区三区| 在线天堂一区av电影| 伊人影院在线视频| 亚洲妇熟xx妇色黄| 日韩免费高清在线| 精品伊人久久| 亚洲大胆人体视频| av手机在线播放| 综合天堂av久久久久久久| 欧美俄罗斯乱妇| 欧美精品二区三区| 日本欧美加勒比视频| 亚洲一区亚洲二区亚洲三区| 人妻精品无码一区二区| 久久久久99精品一区| 黄色www在线观看| 蜜臀av在线播放| 色婷婷综合五月| 久久无码人妻一区二区三区| 日韩三级毛片| 久久精品99久久久香蕉| 免费观看一区二区三区毛片 | 无码人妻久久一区二区三区蜜桃| 日韩a级大片| 日韩在线视频播放| 日韩视频免费观看高清| 久久超碰97中文字幕| 国产精品久久久久久久免费大片 | 久久久精品人体av艺术| 久久av喷吹av高潮av| 亚洲女同志freevdieo| 7777精品伊人久久久大香线蕉经典版下载| 第一页在线视频| 日韩电影免费网址| 97国产精品视频| 国产精品视频一二区| 26uuu国产电影一区二区| 看一级黄色录像| 亚洲四虎影院| 精品不卡在线视频| 老熟妇高潮一区二区三区| 国产日韩欧美一区在线| 99久久伊人精品影院| 日日夜夜精品一区| 日本大香伊一区二区三区| 欧美一级片在线免费观看| 日韩成人激情| 日韩美女视频中文字幕| 欧美一级视频免费| 亚洲精品视频在线观看免费| 麻豆一区二区三区视频| 亚洲婷婷影院| 91精品国产91久久久久久最新 | 蜜桃精品在线| 日韩av中文字幕在线播放| 九九精品在线观看视频| 精品制服美女久久| 亚洲高清视频一区二区| 91精品影视| 亚洲欧美国产精品| 日韩精品视频免费播放| 国产成人免费视| 国产一区二区三区播放| 在线免费观看亚洲| 日韩专区在线播放| 这里只有精品9| 欧美韩日一区二区三区四区| 日韩欧美xxxx| 国产欧美一区二区三区精品观看 | 欧美视频在线观看视频| 欧美片网站免费| 欧美成人一区在线| 99国产在线播放| 亚洲日本在线观看| 91视频福利网| 欧美久久一区| 99re视频在线观看| sqte在线播放| 日韩成人在线免费观看| 一级成人黄色片| 国产亚洲精品bt天堂精选| 国产一级不卡毛片| 欧美日韩一二三四| 国产日韩精品一区二区| 久操免费在线| 欧美大片一区二区| 日韩三级视频在线| 久久久91精品国产一区二区精品| 91av在线免费播放| 久久在线电影| 9a蜜桃久久久久久免费| wwww亚洲| 一色桃子一区二区| 国产熟女精品视频| 亚洲国产中文字幕| mm131美女视频| 久久激情五月婷婷| 轻点好疼好大好爽视频| 天堂在线精品| 国产精品极品尤物在线观看| 黄色免费在线观看网站| 精品国产免费视频| 天堂а√在线中文在线新版| 国产精品久线在线观看| 极品人妻一区二区| 亚洲一区中文| 一本一道久久久a久久久精品91| 警花av一区二区三区| 992tv成人免费影院| 1769在线观看| 欧美大片一区二区| 高潮毛片又色又爽免费 | 日韩久久精品视频| 国产视频一区在线播放| 欧美国产在线一区| 性xx色xx综合久久久xx| 波多野结衣激情| 日韩电影不卡一区| 成人精品视频久久久久| 碰碰在线视频| 久久天天躁日日躁| 日本ー区在线视频| 日韩免费在线观看| 久久精品视频2| 亚洲妇女屁股眼交7| 亚洲欧洲综合网| 91亚洲精品乱码久久久久久蜜桃 | 黄黄视频在线观看| 国产一区二区三区四区| a级国产乱理论片在线观看99| 高清av不卡| 欧美福利视频在线| yw在线观看| 亚洲国产又黄又爽女人高潮的| 亚洲熟妇av乱码在线观看| 午夜精品久久久久久| av最新在线观看| 久久久久综合网| 免费看黄色片的网站| 韩国成人在线视频| 免费涩涩18网站入口| 性欧美长视频| 一卡二卡三卡视频| 911久久香蕉国产线看观看| 日韩成人在线资源| 欧美人妖在线观看| 国产传媒一区二区三区| 24小时成人在线视频| 国产成人激情视频| 涩涩网在线视频| 久久全球大尺度高清视频| 成人影欧美片| www.日韩不卡电影av| 国产1区2区3区在线| 亚洲精品午夜精品| 无码国精品一区二区免费蜜桃| 欧美v国产在线一区二区三区| 中文字幕资源网| 在线观看区一区二| 天堂а√在线中文在线新版| 激情懂色av一区av二区av| 美女毛片在线观看| 一区二区三区欧美日韩| 91在线播放观看| 亚洲色图在线视频| 日韩va亚洲va欧美va清高| 国产精品第一页第二页第三页| 国产精品美女高潮无套 | 老女人性淫交视频| 亚洲女性喷水在线观看一区| 91社区视频在线观看| 中文字幕av资源一区| 五月婷婷婷婷婷| 中文字幕亚洲一区二区av在线| 91制片厂在线| 亚洲色大成网站www久久九九| 国产日产精品一区二区三区的介绍| 国产精品美女久久久久av爽李琼 | 日韩欧美a级成人黄色| 800av免费在线观看| 欧美午夜电影在线| 久操视频在线免费观看| 欧美影院精品一区| 在线观看日批视频| 欧美一区二区精品| 高h放荡受浪受bl| 亚洲国产精品嫩草影院久久| 亚洲人妻一区二区| 国产亚洲视频在线| 视频免费一区| 欧美高清电影在线看| 不卡专区在线| 国产精品福利无圣光在线一区| 日韩一级二级| 亚洲伊人久久综合| 国产成人aa在线观看网站站| 久久精品中文字幕一区二区三区| 国产精品一区二区av交换| 亚洲精品乱码久久久久久蜜桃91 | 国产 欧美 自拍| 亚洲精品一区二区久| aaa在线观看| 久久国产加勒比精品无码| √8天堂资源地址中文在线| 欧洲精品在线视频| 婷婷久久综合九色综合99蜜桃| 成人免费看片网址| 成人vr资源| 成人av在线播放观看| 久久一区二区三区超碰国产精品| 日韩精品视频一二三| 国产91丝袜在线播放| 日本一级免费视频| 亚洲精品高清视频在线观看| 伦av综合一区| 91精品国产麻豆国产自产在线| 日本黄视频在线观看| 国产一区二区av| 91九色在线播放| 国产欧美日韩视频| 狼人精品一区二区三区在线| 一区二区三区的久久的视频| 91久久中文| 亚洲一区二区三区观看| 97精品久久久久中文字幕| eeuss中文字幕| 欧美日韩一区二区精品| 国产超碰人人模人人爽人人添| 亚洲美腿欧美激情另类| 在线视频国产区| 国产精品久久9| 久久综合另类图片小说| 国产精品啪啪啪视频| 香蕉久久a毛片| 日批视频免费看 | 九热这里只有精品| 欧美日韩一区二区三区四区五区| 日本精品一二区| 美女av一区二区三区| 国产精品蜜月aⅴ在线| 美女被啪啪一区二区| 国产精品99免费看| 午夜天堂在线视频| 中文字幕av资源一区| 少妇高潮av久久久久久| 亚洲精品一区二区在线观看| 黄色成人在线观看| 国产精品十八以下禁看| 九色精品91| 亚洲 高清 成人 动漫| 丁香激情综合五月| 欧美日韩三级在线观看| 欧美精品 日韩| 日本三级视频在线播放| 国产精品黄色av| 国产精品一区二区三区av麻| 18禁免费观看网站| 北岛玲一区二区三区四区| 九九九久久久久| 欧美xfplay| 精灵使的剑舞无删减版在线观看| 2022国产精品| 欧美在线首页| 欧美日韩久久婷婷| 亚洲欧美国产毛片在线| 国产精品呻吟久久| 久久成人18免费网站| 国产视频一区二区在线播放| 性欧美18一19内谢| 国产乱码一区二区三区| 中文字幕五月天| 日韩午夜激情av| 男人天堂亚洲天堂| 国产乱码精品一区二区三区中文 | 性囗交免费视频观看| 五月天亚洲婷婷| 深夜福利免费在线观看| 欧美自拍视频在线观看| 国产一区二区三区天码| 亚洲第一中文av| 亚洲欧洲一区二区在线播放| 国产精品久久久久久久久久久久久久久久 | 国内精品伊人久久久久av一坑| 久久99久久99精品免费看小说| 日韩一区二区免费高清| 国内高清免费在线视频| 精品蜜桃一区二区三区| 可以看av的网站久久看| 美国一级黄色录像| 91精品国产一区二区三区香蕉| av在线免费播放| 精品无人区一区二区三区竹菊| 欧美一级二区| 天天做夜夜爱爱爱| 亚洲国产精品电影在线观看| 中文在线аv在线| 亚洲精品无人区| 国产成a人无v码亚洲福利| 欧美福利视频一区二区| 夜夜嗨av色综合久久久综合网 | 欧美一二三区精品| 蜜桃av在线播放| 亚洲欧美日韩精品久久久 | wwwwww日本| 欧美酷刑日本凌虐凌虐| 51精品在线| 亚洲精品二区| 99久久精品国产一区| 在线观看毛片网站| 国内精品免费午夜毛片| 狠狠做六月爱婷婷综合aⅴ| 无码人妻一区二区三区在线视频| 天天操天天干天天综合网| 天堂中文8资源在线8| 国产一区自拍视频| 免费久久99精品国产| 国产精彩视频在线| 中文字幕精品在线| 欧美日韩一区二区三区在线电影| 亚洲欧美久久久久| 五月天欧美精品| 超碰在线网址| 亚洲成色最大综合在线| 91网页版在线| 国产ts变态重口人妖hd|