golang reflect包使用解析
參考
- Go反射編碼
2個重要的類型
其中Type是interface類型,Value是struct類型,意識到這一點很重要
Type和Value擁有的同名方法
Type |
Value |
備注 |
Kind |
Kind |
返回指定對象的Kind類型 |
MethodByName |
MethodByName |
根據方法名找方法 |
Method |
Method |
返回第i個方法 |
NumMethod |
NumMethod |
返回擁有的方法總數,包括unexported方法 |
Field |
Field |
取struct結構的第n個field |
FieldByIndex |
FieldByIndex |
嵌套的方式取struct的field,比如v.FieldByIndex(1,2,3)等價於 v.field(1).field(2).field(3) |
FieldByNameFunc |
FieldByNameFunc |
返回名稱匹配match函數的field |
NumField |
NumField |
返回struct所包含的field數量 |
Type獨有的方法
方法名 |
備注 |
Align |
分配內存時的內存對齊字節數 |
FieldAlign |
作為struct的field時內存對齊字節數 |
Name |
type名 string類型 |
PkgPath |
包路徑, "encoding/base64", 內置類型返回empty string |
Size |
該類型變量占用字節數 |
String |
type的string表示方式 |
Implements |
判斷該類型是否實現了某個接口 |
AssignableTo |
判斷該類型能否賦值給某個類型 |
ConvertibleTo |
判斷該類型能否轉換為另外一種類型 |
Comparable |
判斷該類型變量是否可以比較 |
ChanDir |
返回channel的方向 recv/send/double |
IsVariadic |
判斷函數是否接受可變參數 |
Elem |
取該類型的元素 |
In |
函數第n個入參 |
Out |
函數第n個出參 |
NumIn |
函數的入參數個數 |
NumOut |
函數的出參個數 |
Key |
返回map結構的key類型Type |
Len |
返回array的長度 |
Value獨有的方法
方法名 |
備注 |
Addr |
v的指針,前提時CanAddr()返回true |
Bool |
bool類型變量的值 |
Bytes |
[]bytes類型的值 |
Call |
調用函數 |
CallSlice |
調用具有可變參的函數 |
CanAddr |
判斷能否取址 |
CanInterface |
判斷Interface方法能否使用 |
CanSet |
判斷v的值能否改變 |
Cap |
判斷容量 Array/Chan/Slice |
Close |
關閉Chan |
Complex |
|
Convert |
返回將v轉換位type t的結果 |
Elem |
返回interface包含的實際值 |
Float |
|
Index |
索引操作 Array/Slice/String |
Int |
|
Interface |
將當前value以interface{}形式返回 |
IsNil |
判斷是否為nil,chan, func, interface, map, pointer, or slice value |
IsValid |
是否是可操作的Value,返回false表示為zero Value |
Len |
適用於Array, Chan, Map, Slice, or String |
MapIndex |
對map類型按key取值 |
MapKeys |
map類型的所有key的列表 |
OverflowComplex |
|
OverflowFloat |
溢出判斷 |
OverflowInt |
|
OverflowUint |
|
Pointer |
返回uintptr 適用於slice |
Recv |
chan接收 |
Send |
chan發送 |
Set |
將x賦值給v,類型要匹配 |
SetBool |
|
SetBytes |
|
SetCap |
slice調整切片 |
SetMapIndex |
map賦值 |
SetUint |
|
SetPointer |
unsafe.Pointer賦值 |
SetString |
|
Slice |
return v[i:j] 適用於Array/Slict/String |
String |
return value的string表示方法 |
TryRecv |
chan非阻塞接收 |
Try Send |
chan非阻塞發送 |
Type |
返回value的Type |
UnsafeAddr |
返回指向value的data的指針 |
以上列出的方法及備注只是為了方便理解和記憶,使用時請參考go源碼及package說明
Kind類型
type Kind uint const ( Invalid Kind = iota Bool Int Int8 Int16 Int32 Int64 Uint Uint8 Uint16 Uint32 Uint64 Uintptr Float32 Float64 Complex64 Complex128 Array Chan Func Interface Map Ptr Slice String Struct UnsafePointer )