如何判断 interface{} 是否为指针类型

张开发
2026/4/12 10:59:58 15 分钟阅读

分享文章

如何判断 interface{} 是否为指针类型
在 Go 中可通过 reflect.TypeOf(v).Kind() reflect.Ptr 快速检测任意 interface{} 值是否底层为指针类型若已知具体类型也可使用类型断言或类型开关进行更安全、高效的判断。 在 go 中可通过 reflect.typeof(v).kind() reflect.ptr 快速检测任意 interface{} 值是否底层为指针类型若已知具体类型也可使用类型断言或类型开关进行更安全、高效的判断。Go 的 interface{} 是类型擦除的通用容器其本身不携带“是否为指针”的元信息——真正决定是否为指针的是它所承载的具体值的底层类型underlying kind。因此判断关键在于借助 reflect 包获取该值的反射类型并检查其 Kind() 是否为 reflect.Ptr。以下是最常用且可靠的两种方法? 方法一使用 reflect.Kind()通用、动态适用于运行时未知具体类型的场景例如编写泛型工具函数或通用序列化逻辑import reflectfunc isPointer(v interface{}) bool { return reflect.TypeOf(v) ! nil reflect.TypeOf(v).Kind() reflect.Ptr}// 示例用法type User struct{ Name string }u : User{Name: Alice}p : ufmt.Println(isPointer(u)) // falsefmt.Println(isPointer(p)) // truefmt.Println(isPointer(nil)) // false注意nil interface{} 的 Type 为 nil需判空?? 注意事项 Vozo Vozo是一款强大的AI视频编辑工具可以帮助用户轻松重写、配音和编辑视频。

更多文章