面试题答案
一键面试内存方面
- 值类型接收者:每次调用方法时,会复制该值类型的副本。如果值类型较大(例如包含大量数据的结构体),复制操作会带来额外的内存开销。
- 指针类型接收者:调用方法时传递的是指针,无论数据结构多大,传递的只是一个指针的大小(在64位系统上通常为8字节),不会复制整个数据结构,因此在内存使用上更高效,尤其是对于大的结构体。
方法修改能力方面
- 值类型接收者:方法内部对接收者的修改只会影响副本,不会改变原始值。如果需要修改原始值,需要将修改后的值返回并重新赋值。
- 指针类型接收者:方法内部对接收者的修改会直接作用于原始数据,因为操作的是指针指向的内存地址。
使用场景方面
- 值类型接收者:
- 当结构体较小且不需要在方法中修改结构体状态时,使用值类型接收者更简单直观,例如简单的数学计算结构体。
- 当希望方法内部操作不影响原始数据,而是返回新的结果时,适合使用值类型接收者。
- 指针类型接收者:
- 当结构体较大,为避免复制带来的性能开销,应使用指针类型接收者,例如包含大量字段或大型数组的结构体。
- 当方法需要修改结构体的状态,例如对结构体内部字段进行增删改等操作时,必须使用指针类型接收者。