猿问

如何取消引用动态多级指针?

我试图实现一个函数来打印带有反射和 DFS 的结构树interface{}。


但是我发现很难取消对多级指针的引用(NumField()不能与指针一起使用)。就像:


func Tree(i interface{}) {

  ......

}


var a = 10

var b = &a

var c = &b


Tree(c)

在我看来,也许:


for reflect.ValueOf(i).Kind() == reflect.Ptr {

    t := i.(reflect.Typeof(i))

    i = *t

}

可以工作,但事实并非如此。


有什么办法可以解决这个问题吗?


BIG阳
浏览 101回答 3
3回答

繁花如伊

使用反射你可以这样做:rt := reflect.ValueOf(i).Type()for rt.Kind() == reflect.Ptr {    rt = rt.Elem()}// rt is non-pointer typehttps://play.golang.com/p/YbT1p4R3_1u

缥缈止盈

使用以下间接值: v := reflect.ValueOf(i) for v.Kind() == reflect.Ptr && !v.IsNil() {    v = v.Elem() } // v.Interface() is nil pointer or non-pointer在操场上运行

SMILET

你正在寻找reflect.Indirect(interface{}),// Indirect returns the value that v points to.// If v is a nil pointer, Indirect returns a zero Value.// If v is not a pointer, Indirect returns v.rv := reflect.Indirect(v)
随时随地看视频慕课网APP

相关分类

Go
我要回答