Pointers 在Go中,如何检查值是否为(任何)指针类型?

Pointers 在Go中,如何检查值是否为(任何)指针类型?,pointers,reflection,go,go-interface,Pointers,Reflection,Go,Go Interface,我有一个接口{}的切片,我需要检查这个切片是否包含指针字段值 澄清示例: var str *string s := "foo" str = &s var parms = []interface{}{"a",1233,"b",str} index := getPointerIndex(parms) fmt.Println(index) // should print 3 您可以使用反射(包)来测试值是否为指针类型 func firstPointerIdx(s []interface{})

我有一个
接口{}
的切片,我需要检查这个切片是否包含指针字段值

澄清示例:

var str *string
s := "foo"
str = &s
var parms = []interface{}{"a",1233,"b",str}
index := getPointerIndex(parms)
fmt.Println(index) // should print 3
您可以使用反射(包)来测试值是否为指针类型

func firstPointerIdx(s []interface{}) int {
    for i, v := range s {
        if reflect.ValueOf(v).Kind() == reflect.Ptr {
            return i
        }
    }
    return -1
}
注意,上面的代码测试
接口{}
中“包装”的值的类型(这是
s
切片参数的元素类型)。这意味着如果您传递的切片如下所示:

s := []interface{}{"2", nil, (*string)(nil)}

它将返回
2
,因为即使第三个元素是
nil
指针,它仍然是指针(包装在非
nil
接口值中)。

*str
将取消对指针的引用,并且它将是非指针
字符串类型。你是想把
str
放进切片文字中吗?是的,没有注意到,编辑过。正是我想要的,谢谢!