成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > golang 如何用反射reflect操作結(jié)構(gòu)體

golang 如何用反射reflect操作結(jié)構(gòu)體

熱門標(biāo)簽:阿克蘇地圖標(biāo)注 外呼系統(tǒng)顯本地手機(jī)號 壽光微信地圖標(biāo)注 涿州代理外呼系統(tǒng) 電話機(jī)器人軟件免費(fèi) 百度地圖標(biāo)注后傳給手機(jī) excel地圖標(biāo)注分布數(shù)據(jù) 外呼系統(tǒng)用什么卡 評價(jià)高的400電話辦理

背景

需要遍歷結(jié)構(gòu)體的所有field

對于exported的field, 動(dòng)態(tài)set這個(gè)field的value

對于unexported的field, 通過強(qiáng)行取址的方法來獲取該值(tricky?)

思路

下面的代碼實(shí)現(xiàn)了從一個(gè)strct ptr對一個(gè)包外結(jié)構(gòu)體進(jìn)行取值的操作,這種場合在筆者需要用到反射的場合中出現(xiàn)比較多

simpleStrtuctField 函數(shù)接受一個(gè)結(jié)構(gòu)體指針,因?yàn)樽詈笙M淖兤渲?,所以傳參必須是指針。然后解引用?/p>

接下來遍歷結(jié)構(gòu)體的每個(gè)field, exported字段是CanInterface的,對于unexported字段,需要強(qiáng)行取址來獲取其值

model.go

package model
type Person struct {
 Name string
 age  int
}
func NewPerson(name string, age int) *Person {
 return Person{
  Name: name,
  age:  age,
 }
}

main.go

package main
import (
	"github.com/miaomiao3/log"
	"../model"
	"reflect"
	"unsafe"
)
func main() {
	person := model.NewPerson("haha", 12)
	log.Debug("before:%+v", person)
	simpleStrtuctField(person)
	simpleStrtuctField(person)
	log.Debug("after:%+v", person)
}
// get unexported field
func simpleStrtuctField(v interface{}) {
	dataType := reflect.TypeOf(v)
	dataValue := reflect.ValueOf(v)
	if dataType.Kind() == reflect.Ptr {
		if dataValue.IsNil() {
			panic("nil ptr")
		}
		// 如果是指針,則要判斷一下是否為struct
		originType := reflect.ValueOf(v).Elem().Type()
		if originType.Kind() != reflect.Struct {
			return
		}
		// 解引用
		dataValue = dataValue.Elem()
		dataType = dataType.Elem()
	} else {
		panic("non ptr")
	}
	num := dataType.NumField()
	for i := 0; i  num; i++ {
		field := dataType.Field(i)
		fieldName := field.Name
		fieldValue := dataValue.FieldByName(fieldName)
		if !fieldValue.IsValid() {
			continue
		}
		if fieldValue.CanInterface() {
			log.Debug("exported fieldName:%v value:%v", fieldName, fieldValue.Interface())
			if fieldValue.CanSet()  fieldValue.Kind() == reflect.String {
				oldValue := fieldValue.Interface().(string)
				fieldValue.SetString(oldValue + " auto append")
			}
		} else {
			// 強(qiáng)行取址
			forceValue := reflect.NewAt(fieldValue.Type(), unsafe.Pointer(fieldValue.UnsafeAddr())).Elem()
			log.Debug("unexported fieldName:%v value:%v", fieldName, forceValue.Interface())
		}
	}
}

output:

2019/06/02 17:15:31.64 [D] before:{Name:haha age:12}

2019/06/02 17:15:31.64 [D] exported fieldName:Name value:haha

2019/06/02 17:15:31.64 [D] unexported fieldName:age value:12

2019/06/02 17:15:31.64 [D] after:{Name:haha auto append age:12}

可以看到,Name字段被反射改變了,age的值也已經(jīng)獲取到

補(bǔ)充:go語言通過反射創(chuàng)建結(jié)構(gòu)體、賦值、并調(diào)用對應(yīng)方法

看代碼吧~

package main
import (
	"fmt"
	"reflect"
	"testing"
)
type Call struct {
	Num1 int
	Num2 int
}
func (call Call) GetSub(name string){
	fmt.Printf("%v 完成了減法運(yùn)算,%v - %v = %v \n", name, call.Num1, call.Num2, call.Num1 - call.Num2)
}
func (call *Call) GetSum(name string){
	fmt.Printf("%v 完成了加法運(yùn)算,%v + %v = %v \n", name, call.Num1, call.Num2, call.Num1 + call.Num2)
}
func TestReflect(t *testing.T) {
	var (
		call *Call
		rValues []reflect.Value
		rValues2 []reflect.Value
	)
	ptrType := reflect.TypeOf(call) //獲取call的指針的reflect.Type
	trueType := ptrType.Elem() //獲取type的真實(shí)類型
	ptrValue := reflect.New(trueType) //返回對象的指針對應(yīng)的reflect.Value
	call = ptrValue.Interface().(*Call)
	trueValue := ptrValue.Elem() //獲取真實(shí)的結(jié)構(gòu)體類型
	trueValue.FieldByName("Num1").SetInt(123)//設(shè)置對象屬性,注意這個(gè)一定要是真實(shí)的結(jié)構(gòu)類型的reflect.Value才能調(diào)用,指針類型reflect.Value的會(huì)報(bào)錯(cuò)
	//ptrValue.FieldByName("Num2").SetInt(23)
	trueValue.FieldByName("Num2").SetInt(23)
	//rValues = make([]reflect.Value, 0)
	rValues = append(rValues, reflect.ValueOf("xiaopeng"))//調(diào)用對應(yīng)的方法
	fmt.Println(rValues)
	trueValue.MethodByName("GetSub").Call(rValues)
	/*
	fixme 在反射中,指針的方法不可以給實(shí)際類型調(diào)用,實(shí)際類型的方法可以給指針類型調(diào)用,因?yàn)間o語言對這種操作做了封裝
	所以下面一句是沒問題的
	下下一句會(huì)運(yùn)行時(shí)報(bào)錯(cuò)
	 */
	//ptrValue.MethodByName("GetSub").Call(rValues)
	//trueValue.MethodByName("GetSum").Call(append(rValues2, reflect.ValueOf("hiram")))
	ptrValue.MethodByName("GetSum").Call(append(rValues2, reflect.ValueOf("hiram")))
	fmt.Println(call)
	
	/*
	fixme 在實(shí)際使用中  指針和實(shí)體都能相互轉(zhuǎn)換,不會(huì)影響調(diào)用
	但是指針的方法在方法體內(nèi)的操作會(huì)影響到結(jié)構(gòu)體本身屬性
	而實(shí)體的方法不會(huì),因?yàn)間o對于結(jié)構(gòu)體、數(shù)組、基本類型都是值傳遞
	 */
	call.GetSub("aaa")
	(*call).GetSub("bbb")
	call.GetSum("ccc")
	(*call).GetSum("ddd")
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang 實(shí)現(xiàn)兩個(gè)結(jié)構(gòu)體復(fù)制字段
  • golang通過反射設(shè)置結(jié)構(gòu)體變量的值
  • Golang空結(jié)構(gòu)體struct{}用途,你知道嗎
  • golang修改結(jié)構(gòu)體中的切片值方法
  • Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作
  • golang 結(jié)構(gòu)體初始化時(shí)賦值格式介紹
  • 解決golang結(jié)構(gòu)體tag編譯錯(cuò)誤的問題

標(biāo)簽:重慶 蘭州 吐魯番 欽州 銅川 汕頭 雞西 梅河口

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang 如何用反射reflect操作結(jié)構(gòu)體》,本文關(guān)鍵詞  golang,如,何用,反射,reflect,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang 如何用反射reflect操作結(jié)構(gòu)體》相關(guān)的同類信息!
  • 本頁收集關(guān)于golang 如何用反射reflect操作結(jié)構(gòu)體的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    成人中文字幕在线| 久久亚洲国产精品| 制服丝袜日韩国产| 手机电影在线观看| 亚洲一级少妇| 精品人妻无码一区二区三区蜜桃一| 在线亚洲精品福利网址导航| 欧美亚洲色综久久精品国产| 国产在线视精品麻豆| 玖草视频在线观看| 九九综合九九综合| www.日本在线视频| 97久久综合区小说区图片区| 日本久久久久久久| 欧美久久久久久久久| 人妻互换一区二区激情偷拍| 久久99影视| 久久99久久人婷婷精品综合| 人人人妻人人澡人人爽欧美一区| www.看毛片| 成人久久精品| 中文字幕在线观看高清| 欧美日韩视频免费看| 日韩成人一区二区三区在线观看| 亚洲国产精品高清久久久| www国产亚洲精品| 九九视频精品全部免费播放| 欧美一卡二卡在线| 日本一区二区三区网站| 九色porny丨国产首页在线| 久久久久亚洲av成人网人人软件| 国产视频一区欧美| 亚洲一级特黄| 国产噜噜噜噜噜久久久久久久久| 99久久er热在这里只有精品66| 99www免费人成精品| 国产日韩欧美一区二区三区四区| 中文字幕在线网| 成人午夜sm精品久久久久久久| 免费在线看污片| 毛片av中文字幕一区二区| 2021久久精品国产99国产精品| 免费看欧美美女黄的网站| 久久久www成人免费无遮挡大片| 99精品视频在线观看| 国产专区中文字幕| 亚洲色图100p| 91在线品视觉盛宴免费| 永久域名在线精品| 女人被男人躁得好爽免费视频| 大波视频国产精品久久| 99精品国产福利在线观看免费| 中文字幕乱伦视频| 日韩av网站导航| 久久免费视频1| 欧美精品久久久久久久久| 日本55丰满熟妇厨房伦| 国产高清在线观看视频| 婷婷五月综合久久中文字幕| 成人在线观看av| 91国内视频| 日本黄色不卡视频| 欧美日韩视频一区二区| 亚洲国产一区二区三区在线观看| 亚洲一区二区三区在线免费| 色天天综合狠狠色| 你懂的在线视频| 亚洲人体影院| 日本乱码高清不卡字幕| 青青草91久久久久久久久| 亚洲人成在线网站| 中文字幕精品在线| 日韩亚洲视频在线| 久久亚洲视频| 丰满少妇被猛烈进入高清播放| 人人干人人干人人干| 欧美极品少妇xxxxⅹ喷水| 亚洲精品国产熟女久久久| 久久亚洲一区| 色播亚洲视频在线观看| 亚洲自拍偷拍综合| 国产精品第100页| 欧美自拍视频在线| 波多野结衣亚洲色图| 永久免费毛片在线播放不卡| www.日韩高清| 四虎最新地址发布| 精品国产无码一区二区三区| 亚洲香蕉av在线一区二区三区| 久久香蕉国产线看观看99| 情se视频网在线观看| 91在线网址| caoporn免费在线| 国产伦一区二区三区| 欧美私人情侣网站| 日本精品福利视频| 粉嫩一区二区三区| 亚洲精品国产一区二区| 超碰在线观看91| 国产网站欧美日韩免费精品在线观看| 一级黄色毛毛片| 婷婷久久久久久| 成人av二区| 久操视频在线| jizzjizz日本少妇| 一本一道人人妻人人妻αv| 国产成人a人亚洲精品无码| 日韩av黄色在线| 欧美日韩在线另类| 肉丝美足丝袜一区二区三区四| va婷婷在线免费观看| 久久久久久久性| 日韩一区二区三区在线播放| 国产精品久久久久久婷婷天堂| 亚洲欧美成人网| 4444亚洲人成无码网在线观看| 色欲人妻综合网| 琪琪五月天综合婷婷| 欧美另类综合| 久久久国产91| 91视频免费版污| 精品国产乱码久久久久久久软件| 欧美国产在线一区| 熟妇人妻av无码一区二区三区| 玖玖精品一区| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美视频免费看欧美视频| 日本久久高清视频| 国产亚洲精品久久久久久久| 成年片费网站色大全免费视频| 欧美午夜电影在线| 午夜精品在线播放| 无码精品一区二区三区在线| 欧美mv日韩mv国产网站app| 国产精品美女www爽爽爽| 国产狂喷白浆在线观看视频| 91动漫免费网站| 国产第一页在线观看| 国产免费不卡| 欧美激情精品久久久久久大尺度| 婷婷伊人综合| 国产精品亚洲综合色区韩国| 欧美男男gaytwinkfreevideos| 91福利资源站| 国产偷v国产偷v亚洲高清| 亚洲小说区图片区| 中文字幕第20页| 亚洲AV无码精品色毛片浪潮| 久久久久久77777| 91嫩草香蕉| 天天看天天摸天天操| 污污污www精品国产网站| 欧美精品色图| 欧美另类在线视频| 亚洲免费不卡视频| 91视频免费观看网站| 今天免费高清在线观看国语| 波多野结衣乳巨码无在线观看| 丰满岳乱妇dvd日本| 久久嫩草精品久久久精品一| 午夜精品在线播放| 快色在线观看| 丝袜国产免费观看| 青娱乐精品在线视频| 日韩欧美一中文字暮专区| 一区二区三国产精华液| 亚洲精品自在在线观看| 日韩久久精品电影| 日本韩国在线视频爽| 国产精品嫩草影院在线看| 欧美成人午夜电影| 日本美女一区二区三区视频| 国产自偷自偷免费一区| 欧美激情自拍偷拍| 乱子伦一区二区| 色三级在线观看| 国产日韩欧美一区二区东京热| 日韩网站在线看片你懂的| 日本www视频在线观看| 日韩在线观看免费高清| 91久色国产| 国产又粗又猛又爽又黄的视频小说| 三年中文在线观看免费大全中国| 公肉吊粗大爽色翁浪妇视频| 人人精品亚洲| 春暖花开成人亚洲区| 日本a级片在线播放| 亚洲国产成人porn| 日韩成人精品一区二区三区| 久久欧美一区二区| 国产精品嫩草影院精东| 大杳蕉精品视频在线观看| 国语精品中文字幕| 久久国产精品美女| 精品无码三级在线观看视频| 亚洲国产精品成人| 亚洲一区久久久| 成人午夜免费剧场| 欧美三电影在线| 欧美精品制服第一页| 国产福利视频一区二区| 午夜时刻免费入口| 国产97在线|亚洲| 久久精品日产第一区二区三区乱码| 国产欧美一区二区精品忘忧草| 性欧美疯狂xxxxbbbb| 成人中文在线| 中日韩午夜理伦电影免费| 国产乱码精品一区二区三区卡| 亚洲欧洲精品天堂一级| 一区二区三区四区五区精品| 亚洲性猛交xxxxwww| 欧美中文字幕在线观看视频| 91激情视频| 亚洲自拍欧美另类| 欧产日产国产v| 免费看成人人体视频| 九色视频九色自拍| 亚洲国产成人精品一区二区| 在线天堂中文www官网| 亚洲精品老司机| 先锋影音男人站| 国产91精品对白在线播放| 第四色中文综合网| 另类欧美视频| 日韩不卡av在线| 亚洲色图欧美激情| www.五月婷婷.com| 西西444www无码大胆| 免费欧美激情| xxxx69视频| 日韩精彩视频在线观看| 蜜桃免费网站一区二区三区| 日韩一区二区三区四区在线| 欧美一级片久久久久久久| 欧美制服第一页| 欧美性猛交xxxx乱| 污污网站在线观看| 精品人妻一区二区三区免费看| 欧美性videos| 7777狠狠狠琪琪电影| 久久精品久久精品| 欧美黑人乱大交ⅹxxxxx| 国产一区二区日韩精品欧美精品| 国产美女高潮在线观看| 日本不卡视频一区二区| 5566中文字幕一区二区电影| 亚洲女人被黑人巨大进入al| 欧洲精品一区二区三区在线观看| 日韩欧美一区二区三区在线视频| 都市激情久久久久久久久久久| 在线免费观看毛片| 亚洲激情电影中文字幕| 国产人妻黑人一区二区三区| 国产一区二区在线看| 波多野结衣视频网址| 欧美aaaaa成人免费观看视频| 5g成人永久免费影院| 欧美日韩国产精品一区二区不卡中文| 免费h视频网站| 日韩一区二区免费在线电影| 精品亚洲aⅴ无码一区二区三区| 午夜精品一区二区三区免费视频| 成人做爰66片免费看网站| 夜鲁很鲁在线视频| 亚洲精品一区在线观看| 国产精品久久久久久久久久久久久久久久久| 波多野结衣欲乱| 国产视频久久久久| 可以在线观看的黄色| av丝袜在线| 国产成人三级视频| 欧美高清videos高潮hd| 久久久久免费视频| 亚洲自拍偷拍一区二区三区| 久久噜噜噜精品国产亚洲综合| 91免费视频网站| 日韩激情免费| 68国产成人综合久久精品| 岛国av免费观看| www.国产精品一二区| 天天槽夜夜槽| 亚洲欧美在线视频| 超碰色偷偷男人的天堂| 琪琪亚洲精品午夜在线| 国产成人涩涩涩视频在线观看| bt电影在线| 一本大道香蕉8中文在线视频| 欧美不卡在线视频| 永久免费看mv网站入口亚洲| 亚洲综合精品四区| 亚洲综合视频网| 国产东北露脸精品视频| 疯狂做受xxxx欧美肥白少妇| 久久国产乱子伦精品| 日韩影视精品| 五月婷婷视频在线观看| 欧美这里有精品| 国产网站在线免费观看| 中文字幕激情小说| 羞羞漫画网18久久app| 亚洲性线免费观看视频成熟| 欧美一区二区三区久久久| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精品久久久久久久久久久久久| 777一区二区| 毛片av在线播放| 热舞福利精品大尺度视频| 日韩一级特黄毛片| 少妇精品视频在线观看| 国产色在线播放| 红桃视频成人在线观看| 亚洲黄色在线看| 在线播放91| 国产欧美一区二区精品久导航| 伊人色综合影院| 国产一区二区在线观看免费视频| 国产91久久久久| 久草综合在线视频| 91在线品视觉盛宴免费| 色哟哟国产精品免费观看| 99久热在线精品视频观看| 欧美巨胸大乳hitomi| 成人亚洲一区二区| 亚洲欧美色婷婷| 麻豆蜜桃在线观看| 欧美男人操女人视频| 欧美日韩色婷婷|