面试题答案
一键面试- 指针接收器和值接收器调用方法的不同:
- 值接收器:
- 当使用值接收器调用方法时,Go 语言会在调用方法时创建结构体的副本。这意味着对方法内的结构体操作不会影响原始结构体。
- 对于包含大量字段的结构体,由于需要复制整个结构体,这在内存和性能上开销较大。
- 指针接收器:
- 使用指针接收器调用方法时,传递的是结构体的内存地址,而不是结构体的副本。
- 对方法内结构体的操作会直接影响原始结构体。这样在内存上只需要传递一个指针的大小(在 64 位系统上通常为 8 字节),而不是整个结构体的大小,性能更优。
- 值接收器:
- 在方法调用频繁且结构体数据量较大时的选择及原因:
- 更优选择:指针接收器。
- 原因:由于结构体数据量较大,每次使用值接收器调用方法都要复制大量数据,这会带来很高的内存开销和 CPU 开销(用于复制数据)。而指针接收器只传递指针,内存开销小,并且在频繁调用方法时,这种优势更加明显,能显著提升性能。