假设我只有一个reflect.Type t:fmt.Println(t) //prints lib.Counter我想获得指向这种类型的指针类型,这样:fmt.Println(ptrT) //prints *lib.Counter我怎样才能做到这一点?t可以是任何类型,不仅是 lib.Counter。另外,如果我想反之亦然怎么办?就像从 *lib.Counter 获取 lib.Counter 一样?
2 回答

繁星淼淼
TA贡献1775条经验 获得超11个赞
您可以使用reflect.PointerTo。
要再次获取非指针类型,您可以使用Type.Elem()。
thing := Thing{}
ptrThing := &Thing{}
thingType := reflect.TypeOf(thing)
fmt.Println(thingType) // main.Thing
thingTypeAsPtr := reflect.PointerTo(thingType)
fmt.Println(thingTypeAsPtr) // *main.Thing
ptrThingType := reflect.TypeOf(ptrThing)
fmt.Println(ptrThingType) // *main.Thing
ptrThingTypeAsNonPtr := ptrThingType.Elem()
fmt.Println(ptrThingTypeAsNonPtr) // main.Thing
工作示例:https ://go.dev/play/p/29eXtdgI9Xf

梵蒂冈之花
TA贡献1900条经验 获得超5个赞
您可以通过以下方式实现:
ptr := reflect.PointerTo(reflect.Typeof(lib.Counter{})) // *lib.Counter
变量t
可以是任意类型:
ptr := reflect.PointerTo(t)
- 2 回答
- 0 关注
- 213 浏览
添加回答
举报
0/150
提交
取消