【问题标题】:Method sets for T and *TT 和 *T 的方法集
【发布时间】:2012-05-27 05:08:46
【问题描述】:

Golang language specification states:

任何其他类型 T 的方法集由接收器类型为T 的所有方法组成。对应指针类型*T的方法集是所有接收者为*TT的方法的集合(即它还包含T的方法集)。

这是为什么?为什么接收T的方法属于*T设置的方法,反之不属于?

【问题讨论】:

    标签: methods interface go receiver


    【解决方案1】:

    来自FAQ

    如果接口值包含指针*T,则方法调用可以通过解引用指针来获取值,但如果接口值包含值T,则方法调用没有获得指针的有用方法。

    顺便说一句,带有指针接收器的方法可以改变它的接收器,就像它可以改变一个指针参数一样。将非指针接收器作为指针接收器传递(假设这是可能的),允许方法更改它,这不应该。

    建议对一个类型的所有方法使用一种一致的接收器类型,避免混合指针和直接接收器。大类型也推荐使用指针接收器。

    【讨论】:

    • 优秀的权威答案。干杯。
    猜你喜欢
    • 1970-01-01
    • 2012-05-14
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2013-10-26
    • 2011-04-17
    • 1970-01-01
    相关资源
    最近更新 更多