我得到一個變量的地址,該類型轉換爲unsafe.Pointer,並且我得到了它的類型名稱,例如「int64」或「struct main.Person」或其他人。如何將unsafe.Pointer轉換爲reflect.Type或reflect.Value
看到代碼:
package main
type Person struct {
Name string
Age int
}
p := Person{"john", 25}
addr := unsafe.Pointer(&p)
typName := "struct main.Person"
typ := module.TypeOfByAddr(addr, typName)
// now, I got variable addr, typName in func module.TypeOfByAddr
// how can I get reflect.Type of variable p without using package.Person to convert?
package module
func TypeOfByAddr(addr unsafe.Pointer, typName string) reflect.Type {
// how to convert addr to reflect.Type?
}
我不認爲這是可能的。無論如何,我不禁感到你正在試圖做一些可怕的,可怕的,錯誤的事情。爲什麼在這個世界上你會需要以這種方式濫用類型系統? –
你試圖完成什麼?要獲得一些任意Go值的'reflect.Type/Value',你不需要使用'unsafe.Pointer'。 – mkopriva
@MiloChristiansen我想轉儲每個追溯幀中局部變量的所有值和名稱。如果成功,調試將很方便。我可以得到棧幀中每個變量的地址(類型爲uintptr)。 –