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 )