如何获取接口的静态reflect.Type?解决nil值触发panic问题
问题与解决方案
问题
以下代码运行会触发panic,原因是变量w为nil,reflect.TypeOf无法获取其类型:
package main import ( "fmt" "io" "reflect" ) var w io.Writer func main() { fmt.Println(reflect.TypeOf(w)) // 执行此处会panic }
期望输出结果为io.Writer,且不能依赖预先知晓类型的方案。
解决方法
利用reflect.TypeOf接收指针类型值(即使指针指向nil),再通过Elem()方法获取指针指向的静态类型。修改后的代码如下:
package main import ( "fmt" "io" "reflect" ) var w io.Writer func main() { // 通过指针类型获取原始静态类型 fmt.Println(reflect.TypeOf((*io.Writer)(nil)).Elem()) // 输出: io.Writer }
这个方法无需预先知道变量的实际赋值类型,仅通过其声明的接口类型就能获取到对应的reflect.Type。
内容的提问来源于stack exchange,提问作者andig
相关产品推荐
相关产品推荐

