我正在尝试编写递归遍历结构并跟踪指向其所有字段的指针以进行基本分析(大小、引用数量等)的代码。但是,我遇到了一个问题,我似乎无法得到反射来给我指向纯结构的指针。我以下面的代码为例:
type foo struct {
A *bar
data []int8
}
type bar struct {
B *foo
ptrData *[]float64
}
func main() {
dataLen := 32
refData := make([]float64, dataLen)
fooObj := foo{data: make([]int8, dataLen)}
barObj := bar{
B: &fooObj,
ptrData: &refData,
}
fooObj.A = &barObj
fooVal := reflect.ValueOf(fooObj)
_ := fooVal.Addr().Pointer() // fails
_ := fooVal.Pointer() // fails
// More analysis code after this
}
如果我想穿越fooObj,那就好了,直到我进入barObj,然后我又遇到了fooObj。因为第一次fooObj遇到的指针没办法拿到,最后遍历fooObj了两次,直到碰到barObj第二次才退出递归。知道如何使用反射获取结构的指针吗?
一只斗牛犬
开满天机
holdtom