您好,欢迎访问宜昌市隼壹珍商贸有限公司
400 890 5375Go中选择值或指针接收者取决于是否需修改原值及接收者大小:需修改或结构体较大时用指针接收者;小而不可变类型可用值接收者;同一类型应保持接收者类型一致。
Go中选择值接收者还是指针接收者,核心看两点:是否需要修改接收者本身,以及接收者的大小是否适合拷贝。
值接收者操作的是副本,任何字段赋值都不会影响原始变量。比如实现一个计数器的 Inc 方法:
Go 对值接收者会做完整拷贝。若结构体含大数组、切片、map 或大量字段(比如超过 4~8 个字段),拷贝开销明显:
即使某个小方法逻辑上不需要改原值,只要该类型已有指针接收者方法,其余方法也建议用指
针接收者:
对于基础类型别名(如 type ID int)、小结构体(如 type Point struct{X,Y int}),值接收者更自然:
基本上就这些。不复杂但容易忽略——关键不是“能不能”,而是“该不该”和“要不要保持一致”。