获取 reflect.Type 的指针类型

假设我只有一个reflect.Type t

fmt.Println(t) //prints lib.Counter

我想获得指向这种类型的指针类型,这样:

fmt.Println(ptrT) //prints *lib.Counter

我怎样才能做到这一点?t可以是任何类型,不仅是 lib.Counter。

另外,如果我想反之亦然怎么办?就像从 *lib.Counter 获取 lib.Counter 一样?


MMMHUHU
浏览 182回答 2
2回答

繁星淼淼

您可以使用reflect.PointerTo。要再次获取非指针类型,您可以使用Type.Elem()。thing := Thing{}ptrThing := &Thing{}thingType := reflect.TypeOf(thing)fmt.Println(thingType) // main.ThingthingTypeAsPtr := reflect.PointerTo(thingType)fmt.Println(thingTypeAsPtr) // *main.ThingptrThingType := reflect.TypeOf(ptrThing)fmt.Println(ptrThingType) // *main.ThingptrThingTypeAsNonPtr := ptrThingType.Elem()fmt.Println(ptrThingTypeAsNonPtr) // main.Thing工作示例:https ://go.dev/play/p/29eXtdgI9Xf

梵蒂冈之花

您可以通过以下方式实现:ptr := reflect.PointerTo(reflect.Typeof(lib.Counter{})) // *lib.Counter变量t可以是任意类型:ptr := reflect.PointerTo(t)
打开App,查看更多内容
随时随地看视频慕课网APP