You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go反射中如何通过reflect.Type获取指针类型及反向获取基础类型

Go reflect 基础类型与对应指针类型互转实现

场景说明

现有一个reflect.Type类型变量t:

fmt.Println(t) // 输出 lib.Counter

需要获取该类型对应的指针类型ptrT,满足:

fmt.Println(ptrT) // 输出 *lib.Counter

方案需要适配任意类型,不局限于lib.Counter;同时需要实现反向操作:从代表*lib.Counter的reflect.Type实例,获取其对应的基础类型lib.Counter。

具体实现

1. 从基础类型获取对应指针类型

直接调用reflect标准库内置的PtrTo方法即可,传入原基础类型的reflect.Type实例,就能返回对应指针类型的实例:

// t 为任意非指针类型的reflect.Type实例
ptrT := reflect.PtrTo(t)
fmt.Println(ptrT) // 输出 *lib.Counter

这个方法对所有Go合法类型都生效,不需要额外做类型判断。

2. 从指针类型获取对应基础类型

针对指针类型的reflect.Type实例,直接调用其Elem()方法,就能返回指针指向的基础类型实例:

// ptrT 为指针类型的reflect.Type实例
baseT := ptrT.Elem()
fmt.Println(baseT) // 输出 lib.Counter

注意:Elem()方法并非仅对指针类型生效,切片、数组、Map、Channel类型调用Elem()会返回其元素类型。如果你的输入类型不确定,建议先做类型判断再调用:

if ptrT.Kind() == reflect.Ptr {
    baseT := ptrT.Elem()
    // 处理基础类型逻辑
}

内容的提问来源于stack exchange,提问作者johnydoey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:18:43