我一直在使用指针或值方法接收器阅读FAQ,并说:
接下来是一致性。如果该类型的某些方法必须具有 指针接收器,其余的也应该是,所以方法集是 无论使用何种类型,都是一致的。
为什么这很重要?当然,如果我有一些纯粹用于读取数据的方法,我想使用值接收器,以免冒险对接收器进行破坏性更改。这个建议表明,如果我然后创建一个应该修改接收器上的数据的方法,我应该改变我的所有方法以使用指针接收器。
有人可以解释这个建议背后的原因吗?使用合适的工具做错了什么?
答案 0 :(得分:0)
这句话的关键点是method set consistency
。类型T和* T在Go中是不同的类型,可能有不同的方法集(解释也在FAQ)。
其中一个重要原因是因为Go中隐含了界面满意度。因此,如果你的某些类型的方法有一个指针接收器,而其他方法没有,这可能会导致一种情况,当你期望你的对象满足某个接口时,但现在这取决于你是否使用它的指针或价值。
避免这种混淆是一种很好的做法。