知识卡片

值接收者与指针接收者的选择依据

专业/工作 · 482.a.3.a

内容

Go方法定义时接收者可以是值类型也可以是指针类型,选择依据有两条:一是方法要不要修改接收者本身——值接收者拿到的是原值的一份副本,方法内的修改不会反映到调用方,想要修改(比如往栈里压入元素)就必须用指针接收者;二是性能——接收者类型的底层结构比较大时,即使方法不修改它,用指针接收者也能避免发散:这两条依据经常同时成立——需要修改状态的类型往往也不小,所以实践中的经验法则是”不确定就用指针接收。

参考来源

- 位置:《Go语言程序设计》第1章《5个例子》(源文件:_epub-src/OEBPS/text00035.html) - 结论依据:原文在该章节围绕“Go方法定义时接收者可以是值类型也可以是指针类型,选择依据有两条:一是方法要不要修改接收者本身——值接收者拿到…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:n 个元素到最后一个元素的切片。在数据集合那一章节,我们将会看到Go语言在这方面的详细语法。对于 os.Args ,这个切片总是至少包含一个string(程序本身的名字),其在切片中的位置索引为0(Go语言中的所有索引都是从0开始的)。 只要用户输入一个或多个命令行参数, if 语句的条件就成立了,我们将从命令行输入的所有参数连接成一个字…