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
)

golang reflect包使用解析的更多相关文章

  1. golang中的reflect包用法

    最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...

  2. golang包引用解析

    golang包引用解析 环境变量配置如下: GOROOT----[C:\Go] GOPATH----[F:\workspace\go_home] vs code配置如下: F:\workspace\g ...

  3. Golang : cobra 包解析

    笔者在<Golang : cobra 包简介>一文中简要的介绍了 cobra 包及其基本的用法,本文我们从代码的角度来了解下 cobra 的核心逻辑. Command 结构体 Comman ...

  4. Golang学习 - reflect 包

    ------------------------------------------------------------ 在 reflect 包中,主要通过两个函数 TypeOf() 和 ValueO ...

  5. Golang : pflag 包简介

    笔者在前文中介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛.pflag 包的设计目的就是替代标准库中的 flag ...

  6. golang reflect知识集锦

    目录 反射之结构体tag Types vs Kinds reflect.Type vs reflect.Value 2019/4/20 补充 reflect.Value转原始类型 获取类型底层类型 遍 ...

  7. golang reflect 简单使用举例

    golang中的多态,主要由接口interface体现. 接口interface在实现上,包括两部分:动态类型和动态值. golang提供的reflect包可以用来查看这两部分. 动态类型 func ...

  8. golang reflect

    golang reflect go语言中reflect反射机制.详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect ...

  9. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

随机推荐

  1. Sqler-Cmd

    针对于sqler 工具cmd 部分 做了如下整理 1 Cluster Model 2 Regedit Model $servers= '192.168.25.xx','192.168.25.yy' W ...

  2. Unity3d之Coroutine

    在Unity3d中使用C#时,Coroutine是一个大有用处的好东西,至于怎么用网上多的是讲,我仅在此记录最近一次使用中的小发现. 因为某种需求,要在一个Coroutine实现中使用while循环, ...

  3. Solr中的一些查询参数

    fl: 是逗号分隔的列表,用来指定文档结果中应返回的 Field 集.默认为 “*”,指所有的字段. defType: 指定query parser,常用defType=lucene, defType ...

  4. 【MVC】使用FormCollection获取Form表单数据

    public ActionResult Create(FormCollection form) { string name = form["name"]; //姓名 string ...

  5. 销售系统项目业务分析和Java中使用邮箱

    项目一般大致可分为三个模块, 我们以销售系统为例 分为 基础模块 进货模块 财务模块三个 基础模块分为:权限模块 产品模块和基础代码,基础模块的设计十分重要会影响到整个项目, 代码较为简单 核心模块 ...

  6. Python数据采集处理分析挖掘可视化应用实例

    距离上一次发Python的技术贴已经过去两年了,这两年大法初成,并在知乎谢了相关技术专栏.现在搬运如下,均为原创,转载需注明出处哦! https://zhuanlan.zhihu.com/p/2957 ...

  7. [javascript]——将变量转化为字符串

    这是一个非常常用,但是我自己却经常忘记的一个方法: var item = 'textssdf'; console.log("'"+item+"'") > ...

  8. 【Map,HashMap,Vector,List】资料汇总

    深入学习HashMap实现原理 http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html 深入学习Vector原理 http:/ ...

  9. 在linux云服务器上运行Jar文件

    在linux服务器上运行Jar文件时通常的方法是: $ java -jar test.jar 这种方式特点是ssh窗口关闭时,程序中止运行.或者是运行时没法切出去执行其他任务,有没有办法让Jar在后台 ...

  10. 总结day13 ----内置函数

    内置函数 我们一起来看看python里的内置函数.什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等.截止到python版本3.6.2,现在python一共为 ...