目錄· 1. 反射簡介 · 2.1 基本反射 · 2.5 反射例子 1. 反射簡介Go語言提供了一種機制在運行時更新和檢查變量的值、調(diào)用變量的方法和變量支持的內(nèi)在操作,但是在編譯時并不知道這些變量的 反射是指在程序運行期對程序本身進行訪問和修改的能力,程序在編譯時變量被轉(zhuǎn)換為內(nèi)存地址,變量名不會被編譯器寫入到可執(zhí)行部分,在運行程序時程序無法獲取自身的信息。 舉個例子
將變量a定義成一個int類型 現(xiàn)在我并不知道變量a是什么類型,但是我可以通過反射也知曉變量a是什么來歷!是什么類型!
所以這個類別和類型有時候相同,有時候不同。 在開發(fā)當中,當我們對于某一個函數(shù)進行值的處理的時候,但是為了保證這個函數(shù)能接受更多類型的值,因為go是強類型的語言,雖然interface可以接受所有的數(shù)據(jù)類型,但是在處理數(shù)據(jù)的時候,要對不同類型進行不同的處理的時候就會顯得代碼十分冗余,于是我們可以使用反射來進行對傳入?yún)?shù)的判斷與處理。 詳細見例題 2. reflect包
Go語言程序中對指針獲取反射對象時,可以通過
可以通過
也可以使用
來進行創(chuàng)建原始對象。 如果反射值對象
填寫fn函數(shù)使得輸出為 要求不使用任何的switch 或是 if 或是其他選擇語句。
(1)首先是test的知識:
(2)其次是了解這個fn()里面的匿名函數(shù)
可以看到這是一個*aaa類型的數(shù)組。那么我們?nèi)蝿?wù)就是反射出fn這個函數(shù)里面的匿名函數(shù),然后調(diào)用反射出來的這個匿名函數(shù),并將參數(shù)傳入其中。 以下都是用第一個作為例子 (3)那么我們先ValueOf和TypeOf這個interface{},然后再看這個匿名函數(shù)各種的值
我們可以看到入?yún)⒌暮瘮?shù)的Type是
拿到匿名函數(shù)的傳入?yún)?shù) (4)重點??!
我們要創(chuàng)建這樣一個類別的對象,雖然go并不是面向?qū)ο蟮木幊?,但是這里可以這樣理解。 為什么要這個類型呢? 因為后面把bytes切片反序列化成這個類型的變量,傳入這個匿名函數(shù)中!
那么問題又來了,傳入的值的類型是
報錯了!類型不對! 那么我們就要進行去
那么我們可以用
大功告成了! 3. 總結(jié)以前我是很少使用反射的,基本在項目中就沒用過,但是暑期實習(xí)的時候,第一個任務(wù)就是寫反射接口,那么就瘋狂補這方面的知識,反射對于我來說,確實有點難理解,花了我兩天時間才做出來。 原來我的想法是用 現(xiàn)在這種的話,直接將這個類型的反射成一個對象,然后再對這個對象進行賦值操作,就更加靈活! 學(xué)到了! 實習(xí)很痛苦!但是學(xué)到了很多新知識!還有好多大佬帶!還有工資拿!也舒服! 以上就是Golang語言學(xué)習(xí)拿捏Go反射示例教程的詳細內(nèi)容,更多關(guān)于Go反射教程的資料請關(guān)注腳本之家其它相關(guān)文章! |
|
來自: 新用戶604881da > 《待分類》