chan是什麼型別就能存放什麼型別的資料,我們看看反射,他可不管你什麼型別,隨便傳吧,fmt.Println中傳入任何型別的資料都可以列印
1) 反射可以在執行時動態獲取變數的各種資訊, 比如變數的型別(type),類別(kind)
reflectType(變數名) reflectValue(變數名)
2) 如果是結構體變數,還可以獲取到結構體本身的資訊(包括結構體的欄位、方法)
3) 透過反射,可以修改變數的值,可以呼叫關聯的方法。
func reflectTest01(b interface{}) {
//透過反射獲取的傳入的變數的 type , kind, 值
//1. 先獲取到 reflect.Type
rTyp := reflect.TypeOf(b)
fmt.Println("rType=", rTyp)
//2. 獲取到 reflect.Value
rVal := reflect.ValueOf(b)
rVal.Elem().SetInt(180)
fmt.Println(rVal)
}
func main() {
var num int = 100
reflectTest01(&num)
fmt.Println("num=", num)
}
執行結果:
rType= *int
0xc00001e108
num= 180
透過反射的來修改變數, 注意當使用 SetXxx 方法來設定需要透過對應的指標型別來完成, 這樣才能改變傳入的變數的值, 同時需要使用到 reflect.Value.Elem()
本作品採用《CC 協議》,轉載必須註明作者和本文連結