golang reflect包使用解析


golang reflect包使用解析

參考

  1. Go反射編碼

2個重要的類型

  • Type
  • Value

其中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 )


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM