Introduction
reflection是golang中用来获取interface的type, value和method的方式,本文主要介绍这三种使用方式。
golang reflection
interface的类型
- 获取interface的type
1 | t := reflect.Typeof(3) |
Typeof用来获取某个interface的类型。
interface的值
- 获取interface的value
1 | v := reflect.ValueOf(3) |
ValueOf中返回值类型是reflect.Value,也可以通过它来获取其类型。
1 | v := reflect.Value(3) // a reflect.Value |
Type()返回的是reflect.Type类型,而Interface返回的是reflect.Interface
1 | v := reflect.Value(3) |
如上,Kind可以用来获取具体的类型,通过switch语句来匹配具体的类型。
- 设置reflect.Value的值
1 | x := 2 |
可以通过ValueOf.Elem获取元素的值,然后通过Set方法设置。
interface的函数
- 遍历struct的method
1 | v := reflect.ValueOf(x) |
通过NumMethod来遍历,获取到对应的Method,其类型是reflect.Value
,通过其Call方法来调用该函数。
- 通过函数名来调用
1 | v := reflect.ValueOf(x) |
通过MethodByName获取到函数然后调用Call也能完成调用。
例子
下面以一个完整的例子,来完整的展示reflect.Type,reflect.Value和reflect.Method的用法。
1 | package main |
PS:
本博客更新会在第一时间推送到微信公众号,欢迎大家关注。