基本介紹
1.反射可以在運行時動態獲取變量的各種信息,比如變量的類型(type),類別(kind)
2.如果是結構體變量還可以獲取到結構本身的信息(包括字段和方法)
3.通過反射可以修改變量的值,可以調用關聯的方法
4.使用反射需要引入reflect包
reflect包介紹
import "reflect"
reflect包實現了運行時反射,允許程序操作任意類型的對象。典型用法是用靜態類型interface{}保存一個值,通過調用TypeOf獲取其動態類型信息,該函數返回一個Type類型值。調用ValueOf函數返回一個Value類型值,該值代表運行時的數據。Zero接受一個Type類型參數並返回一個代表該類型零值的Value類型值。
反射的注意事項和細節說明
1.reflect.Value.Kind,獲取變量的類別,返回的是一個常量
2.Type是類型,Kind是類別,Type和Kind可能是相同的,也可能是不相同的,
比如說自定義一個結構體Person,那麼這個結構體的類別是struct,類型是Person,
自定義一個結構體Computer,那麼這個結構體的類別是struct,類型是Computer,
但是如果是int的話,那麼類型和類別都是int
3.通過反射可以讓變量在interface{}和Reflect.Value之間相互轉換,interface可以通過類型斷言得到實際變量的類型