You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断interface类型变量是否是指向切片的指针

实现逻辑

你可以通过reflect.Value的Elem()方法获取指针指向的底层值,再判断其类型是否为切片即可,完整校验函数如下:

func isPointerToSlice(i interface{}) bool {
    if i == nil {
        return false
    }
    v := reflect.ValueOf(i)
    // 先判断是否为指针
    if v.Kind() != reflect.Ptr {
        return false
    }
    // 取指针指向的底层值,判断是否为切片
    return v.Elem().Kind() == reflect.Slice
}

测试验证

你可以用以下用例验证效果:

func main() {
    var a int = 10
    var s []string = []string{"a", "b"}
    var p1 *int = &a
    var p2 *[]string = &s
    var p3 *[]int = nil // 空指针,指向切片类型

    fmt.Println(isPointerToSlice(nil))    // false
    fmt.Println(isPointerToSlice(a))      // false
    fmt.Println(isPointerToSlice(s))      // false
    fmt.Println(isPointerToSlice(p1))     // false
    fmt.Println(isPointerToSlice(p2))     // true
    fmt.Println(isPointerToSlice(p3))     // true (即使指针为空,类型匹配依然返回true)
}

注意要点

  • 即使指针本身是nil,只要指针的类型是「指向切片的指针」,该函数也会返回true,符合Go的类型校验逻辑
  • 如果需要额外校验指针指向的切片非空,可以在最后一步追加!v.Elem().IsNil()的判断即可

内容的提问来源于stack exchange,提问作者Ado Ren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:36:05