天天看點

(四十五)golang--反射

反射基本介紹:

(1)反射可以在運作時動态擷取變量的各種資訊,比如變量的類型、類别;

(2)如果是結構體變量,還可以擷取結構體本身的資訊(包括結構體字段、方法);

(3)通過反射,可以修改變量的值,可以調用關聯的方法;

(4)使用反射,需要Import "reflect:"

變量--空接口--relect.Value之間的轉換關系:

(四十五)golang--反射

int變量與反射變量之間的轉換:

(四十五)golang--反射

 結構體變量與反射變量之間的轉換:

(四十五)golang--反射

反射注意事項和使用細節:

(1)reflect.Vale.Kind,擷取變量的類别,傳回的是一個常量;

(四十五)golang--反射

(2)Type是類型,Kind是類别,Type和Kind可能是相同的,也可能是不同的;

比如:var num int=10的type是Int,Kind也是int

     var stu Student, stu的rype是pkg1.Student,Kind是struct

(3)通過反射介意讓變量在interface{}和reflect.Value之間互相轉換;

(4)使用反射的方式來擷取變量的值,要求資料類型比對;

(5)通過反射來修改變量,注意當使用SetXxx方法來設定需要通過對指針類型來完成,這樣才能改變傳入變量的值,同時需要使用到reflect.Value.Elem()方法;即rVal.Elem().SetInt(20)

具體實踐;

使用反射來周遊結構體的字段,并調用結構體的方法,并擷取結構體标簽的值。

要在反射中修改結構體的字段的值,必須傳入的是位址,并且在反射中使用.Elem().SetXxx()

(四十五)golang--反射

具體實踐2:通過反射完成擴充卡

運作結果:

(四十五)golang--反射

具體實踐3:通過反射操作任意結構體類型

(四十五)golang--反射