登录
首页 >  Golang >  Go问答

为什么新建Encoder对象的类型不等于接口变量的类型?

来源:stackoverflow

时间:2024-02-19 08:27:24 220浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《为什么新建Encoder对象的类型不等于接口变量的类型?》,涉及到,有需要的可以收藏一下

问题内容

这是简短的测试:

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


正确答案


来自 reflect.TypeOf 文档:

typeof 返回表示动态类型的反射 type 我。 如果 i 是一个 nil 接口值,typeof 返回 nil。

因此:

var en encoder // nil interface value

encoderinterface2 := reflect.typeof(en) // <- nil

至于:

encoderinterface1 := reflect.typeof(new(encoder)).elem()

将其分为两部分:

pi := reflect.typeof(new(encoder)) // <- this is a pointer to an interface (so not nil)
encoderinterface1 := pi.elem()

所以:

encoderinterface1 != encoderinterface2

因为:

encoderInterface1 != nil

好了,本文到此结束,带大家了解了《为什么新建Encoder对象的类型不等于接口变量的类型?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>