首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么reflect.TypeOf(新(编码器)).Elem() != reflect.TypeOf(interfaceVariable)?

为什么reflect.TypeOf(新(编码器)).Elem() != reflect.TypeOf(interfaceVariable)?
EN

Stack Overflow用户
提问于 2022-10-15 01:33:05
回答 1查看 41关注 0票数 2

下面是一个简短的测试:

代码语言:javascript
运行
复制
type Encoder interface {
    Encode()
}
func main() {
    encoderInterface1 := reflect.TypeOf(new(Encoder)).Elem()
    var en Encoder
    encoderInterface2 := reflect.TypeOf(en)
    fmt.Println(encoderInterface1 == encoderInterface2)
}

输出false

为什么是false?我还以为是true呢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-15 03:03:05

来自reflect.TypeOf文档:

TypeOf返回反射类型,该类型表示i. 的动态类型,如果我是nil接口值,则TypeOf返回nil.

因此:

代码语言:javascript
运行
复制
var en Encoder // nil interface value

encoderInterface2 := reflect.TypeOf(en) // <- nil

至于:

代码语言:javascript
运行
复制
encoderInterface1 := reflect.TypeOf(new(Encoder)).Elem()

把它分成两部分:

代码语言:javascript
运行
复制
pi := reflect.TypeOf(new(Encoder)) // <- this is a pointer to an interface (so not nil)
encoderInterface1 := pi.Elem()

所以:

代码语言:javascript
运行
复制
encoderInterface1 != encoderInterface2

因为:

代码语言:javascript
运行
复制
encoderInterface1 != nil
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74076081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档