go - 如何使用反射来检查结构字段的类型是否为接口(interface){}?

标签 go reflection

我正在使用反射包来确定结构字段的类型是 interface{}

我想像这样进行比较(其中 t 是一个 reflect.Type):

if  t == reflect.TypeOf(interface{}) {

}

问题是编译器报错:type interface {} is not an expression

有没有办法检查结构字段的类型是否为接口(interface){}

最佳答案

您可以通过创建一个 nil 实例并使用反射来获取接口(interface) Y 的类型:

yType := reflect.TypeOf((*Y)(nil)).Elem()

然后使用表达式

reflect.TypeOf(x).Implements(yType)

检查类型是否实现接口(interface)。

接口(interface)本身不能被实例化。 interface{} 接口(interface)是一个空接口(interface),由所有类型实现,因此所有字段都实现它。

https://play.golang.org/p/gRfheIW_9Y

实际上它也适用于空接口(interface){}本身,但这将始终返回 true(如果我没有遗漏某些东西):

https://play.golang.org/p/29rWP4LtIo

关于go - 如何使用反射来检查结构字段的类型是否为接口(interface){}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41694647/

相关文章:

java - 如何为 int[] 编写 easyMock.expect

scala - 在运行时访问函数源代码的宏

go - 是否可以只记录收到的每个信号而不改变行为?

go - 在 Golang 中通过模板解析自定义变量

java - 为什么同一个 interned String 文字在此 java 代码片段中具有多个值?

c#泛型类无法获取属性值

c# - 将生成 SelectList 的两个方法重构为一个方法

Heroku Golang - 找不到命令 'main'

go - 正确区分未设置(nil)和空白/空值

docker - 如何在 Go Docker 多阶段构建中添加本地依赖?