go 學習之反射
阿新 • • 發佈:2020-12-20
TypeOf() 函式用來提取一個介面中值的型別資訊。由於它的輸入引數是一個空的interface{}
,呼叫此函式時,實參會先被轉化為interface{}
型別。這樣,實參的型別資訊、方法集、值資訊都儲存到interface{}
變數裡了
ValueOf() 返回值reflect.Value
表示interface{}
裡儲存的實際變數,它能提供實際變數的各種資訊。相關的方法常常是需要結合型別資訊和值資訊。
注意事項:
reflect.Vlaue.Kind,reflect.Type.Kind,獲取變數的類別,返回的是一個常量
Type 是型別,Kind是類別,Type和Kind可能相同,也可能不同
如: var num int = 10 num的Type是int,Kind也是int
var stu Student stu的Type是pkg1.Student,Kind是struct
通過反射可以讓變數在interface{}和Reflect.Value之間相互轉換
使用反射的方式來獲取變數的值,要求資料型別匹配,比如x是int,那麼就應該使用reflect.Value(x).Int()
package main import ( "reflect" "fmt" ) type Student struct { name string age int } func reflectTest(b interface{}) { rType := reflect.TypeOf(b) rVal := reflect.ValueOf(b) iv := rVal.Interface() stu := iv.(Student) fmt.Printf("type: %T, vtype:%T, name: %v, age:%d\n", rType, rVal, stu.name, stu.age) } func main() { stu := Student{"caoxt", 30} reflectTest(stu) }