给出一段示例代码,主要演示如何判断某struct类型是否实现了某接口
1 | package main |
输出:
1 | main.Tester |
本文中比较难理解的一个点就是需要将nil转换成接口指针类型 (接口也是go中的一个数据类型,和其他类型int,string一样,也是存在对应的指针类型的),然后通过反射获取该接口指针类型的类型,最后通过Element()方法获取指针对应的接口类型。之所以要这么做的原因是,无法直接获取接口的类型。
尝试如下操作,获取Tester接口的类型:
1 | var intf Tester //nil接口 |
也尝试过直接将nil转成Tester接口,然后通过反射获取类型
1 | reflect.TypeOf(Tester(nil)) |
将上述结果作为参数传递给Implement(),都会报如下错误:
1 | panic: reflect: nil type passed to Type.Implements |
这是因为上述两种方法通过反射获取的类型都为nil