Go語(yǔ)言提供了 reflect 包來(lái)訪問(wèn)程序的反射信息锚沸。
package main
import (
"fmt"
"reflect"
)
type P struct {
X int
Y int
}
func main() {
point := P{1, 2}
typeOfPoint := reflect.TypeOf(point)
fmt.Println(typeOfPoint.Name(), typeOfPoint.Kind())
}
輸出結(jié)果:
P struct
種類(lèi)(Kind)指的是對(duì)象歸屬的品種兔院,在 reflect 包中有如下定義:
type Kind uint
const (
Invalid Kind = iota // 非法類(lèi)型
Bool // 布爾型
Int // 有符號(hào)整型
Int8 // 有符號(hào)8位整型
Int16 // 有符號(hào)16位整型
Int32 // 有符號(hào)32位整型
Int64 // 有符號(hào)64位整型
Uint // 無(wú)符號(hào)整型
Uint8 // 無(wú)符號(hào)8位整型
Uint16 // 無(wú)符號(hào)16位整型
Uint32 // 無(wú)符號(hào)32位整型
Uint64 // 無(wú)符號(hào)64位整型
Uintptr // 指針
Float32 // 單精度浮點(diǎn)數(shù)
Float64 // 雙精度浮點(diǎn)數(shù)
Complex64 // 64位復(fù)數(shù)類(lèi)型
Complex128 // 128位復(fù)數(shù)類(lèi)型
Array // 數(shù)組
Chan // 通道
Func // 函數(shù)
Interface // 接口
Map // 映射
Ptr // 指針
Slice // 切片
String // 字符串
Struct // 結(jié)構(gòu)體
UnsafePointer // 底層指針
)
任意值通過(guò) reflect.TypeOf()
獲得反射對(duì)象信息后涧尿,如果它的類(lèi)型是結(jié)構(gòu)體宋列,可以通過(guò)反射值對(duì)象 reflect.Type
的 NumField()
和 Field()
方法獲得結(jié)構(gòu)體成員的詳細(xì)信息。