go 反射的快速入門
阿新 • • 發佈:2022-03-27
此處的變數reflect.TypeOf, reflect.ValueOf, 返回的 其實表示的不是真正的int,它是 reflect.TypeOf(b) 返回的type Type interface, 介面,裡面包含了很多方法 不能 var a int = 10, var a1 rType=20
package main import ( "fmt" "reflect" ) //專門演示反射 func reflectTest01(b interface{}) { //通過反射獲取的傳入的變數的type , kind,值 //1。先獲取到 reflect.Type // 此處的變數rType 其實表示的不是真正的int,它是 reflect.TypeOf(b) 返回的type Type interface, 介面,裡面包含了很多方法 不能 var a int = 10, var a1 rType=20 rTyp := reflect.TypeOf(b) fmt.Println("rType=", rTyp) fmt.Printf("rType=%v type=%T \n", rTyp,rTyp) //2.獲取到 reflect.value rVal := reflect.ValueOf(b) //n1 := 2 + rVal 此處不能編譯,說明rVal也不是真正的int'型別100 fmt.Println("rval=", rVal) fmt.Printf("rVal=%v rVal type=%T\n", rVal,rVal) // 求出真正的int n2 := 2 + rVal.Int() // fmt.Println("rval=", rVal) fmt.Printf("rVal=%v rVal type=%T\n", n2,rVal) //下面我們將 rVal轉成interface{} iV := rVal.Interface() fmt.Printf("iv = %v, type=%T\n",iV,iV) //將interface{}通過斷言轉成需要的型別 num2 := iV.(int) fmt.Printf("num2=%v type=%T\n",num2, num2) } func main() { //請編寫一個案例, //演示對(基本資料型別、interface{(}、reflect. value)進行反射的基本操作 //1。先定義一個int var num int = 100 reflectTest01(num) }
輸出:
rType= int
rType=int type=*reflect.rtype
rval= 100
rVal=100 rVal type=reflect.Value
rval= 100
rVal=102 rVal type=reflect.Value
iv = 100, type=int
num2=100 type=int