Golang language specification states:
任何其他类型T的方法集由接收器类型T的所有方法组成 . 相应指针类型* T的方法集是具有接收器* T或T的所有方法的集合(也就是说,它还包含方法集) T) .
为什么是这样?为什么接收 T
的方法属于 *T
的方法集但反之亦然?
Golang language specification states:
任何其他类型T的方法集由接收器类型T的所有方法组成 . 相应指针类型* T的方法集是具有接收器* T或T的所有方法的集合(也就是说,它还包含方法集) T) .
为什么是这样?为什么接收 T
的方法属于 *T
的方法集但反之亦然?
1 回答
来自FAQ:
顺便说一下,指针接收器的方法可以改变它的接收器,就像它可以改变指针参数一样 . 将非指针接收器作为指针接收器(假设这是可能的),允许该方法改变它,而不应该改变它 .
建议对所有类型的方法使用一种一致的接收器类型,并避免混合指针和直接接收器 . 还建议对大型使用指针接收器 .