面试题答案
一键面试选择指针接收者
- 优点:
- 避免数据拷贝:对于大型结构体,使用指针接收者可以避免在方法调用时对整个结构体进行拷贝,大大减少内存开销和性能损耗。例如处理包含大量字段的数据库记录结构体时,若使用值接收者,每次方法调用都要复制整个结构体,而指针接收者只需传递指针(通常为8字节)。
- 可修改原数据:方法内部可以直接修改调用者传入的结构体实例的数据。比如在一个实现对结构体内部数据进行更新操作的方法中,指针接收者能直接修改调用处的结构体变量。
- 缺点:
- 语义较复杂:如果方法不需要修改接收者数据,使用指针接收者可能会让代码阅读者困惑,因为指针传递可能暗示数据会被修改。
- 空指针问题:调用者可能传入空指针,方法内部需要额外进行空指针检查,否则会导致运行时错误。
选择值接收者
- 优点:
- 简单直观:语义清晰,方法不会修改调用者传入的结构体实例的数据,调用者不用担心数据被意外修改。例如实现一个仅用于计算结构体某个属性值的方法,使用值接收者更合适。
- 避免空指针问题:由于值接收者是原结构体的副本,不会出现空指针引发的运行时错误。
- 缺点:
- 数据拷贝开销:对于大型结构体,值接收者会带来较大的内存开销和性能损耗,因为每次方法调用都会复制整个结构体。
- 无法修改原数据:方法内部对接收者的修改不会影响到调用者传入的原结构体实例。