Go 新手在方式信号接收器选择上可能困惑不已

lxf2023-12-15 04:10:01

文中已经参与「」

文中先发于希土程序编写,转载请联系受权

创作者:陈明勇

微信公众号:Go技术性干货知识

序言

很多 Go 新手在方式信号接收器选择上可能困惑不已,也不知道该挑选值信号接收器或是表针信号接收器。文中将对方式信号接收器进行讲解,并做出怎么选择正确方式信号接收器的指导建议。

Go 新手在方式信号接收器选择上可能困惑不已

方式信号接收器

Go 语言中,方式信号接收器指的是在函数名前主要参数,作为方式的接受者,其实就是此方法所属种类。方式信号接收器能够是一个值类型(如 struct 或自定义类型),还可以是偏向一个值类型的指针类型。

值信号接收器

值信号接收器是把种类数值做为方式信号接收器。

假定我们有一个结构体类型 Person

type Person struct {
   Name string
   Age  int
}

我们能为 Person 结构体定义一个 SayHello 的办法:

func (p Person) SayHello() {
   fmt.Println("您好,我就是陈明勇,余生请多指教!")
}

在用这种方法的概念中,大家采用了一个值类型的信号接收器 (p Person)。这就意味着一切 Person 种类数值或表针都能够启用 SayHello 方式,比如:

p := Person{Name: "陈明勇", Age: 23}
p.SayHello()
p2 := &Person{Name: "陈明勇", Age: 23}
p2.SayHello()

表针信号接收器

表针信号接收器是把类别的表针做为方式信号接收器。

然后值信号接收器代码事例,我们能为 Person 结构体定义一个 SetName(name string) 方式:

func (p *Person) SetName(name string) {
   p.Name = name
}

在用这种方法的概念中,大家采用了一个指针类型的信号接收器 (p *Person)。这就意味着一切 Person 类别的表针都能够启用 SetName 方式,比如:

p := Person{Name: "陈明勇", Age: 23}
p.SetName("Chen Mingyong")
fmt.Println(p)
p2 := &Person{Name: "陈明勇", Age: 23}
p2.SetName("Chen Mingyong")
fmt.Println(p2)

值信号接收器与表针信号接收器得比较

值信号接收器

  1. 当使用值信号接收器时,方式内部结构对信号接收器的修改不会影响原始值。
  2. 指信号接收器能够接受种类数值和表针,假如是表针,在方式内部结构能被变为值。

表针信号接收器

  1. 当使用表针信号接收器时,方式内部结构对信号接收器的修改会对原始值。
  2. 指信号接收器能够接受种类数值和表针,假如是值,在方式内部结构能被变为表针。

怎样选择适合的方式信号接收器

挑选标准

在选择方法信号接收器时,大家应该考虑以下几种要素:

  1. 改动原始值的需要:假如方式要改动信号接收器数值,那样一定要使用 表针信号接收器。由于值信号接收器会建立原始值的团本,在方式内部结构对它进行的修改 不容易 危害原始值。
  2. 算法设计尺寸:针对大中型算法设计,应用 表针信号接收器 能够避免数据复制产生性能花销。但对于比较小的算法设计,应用 值信号接收器 也许不会产生显著性能危害。
  3. 一致性:在同一个类型中,要保持 一致性,防止混合使用值信号接收器和表针信号接收器。这有助于提升程序代码易读性和可扩展性。
  4. 安全系数:值信号接收器不容易改动原始值,因而某些情况下很有可能安全系数高。必要时 维护 原始记录不会被出现意外改动,能够尝试使用 值信号接收器

具体开发设计中的一些提议

  1. 在具体设计中,要保持 一致性,防止在同一个类型中混合使用值信号接收器和表针信号接收器。
  2. 假如依然 不确定 应用哪一种信号接收器,最好使用 表针信号接收器,因为他能够避免数据复制产生性能花销。

总结

文中简要介绍了 Go 语言表达里的方式信号接收器,关键介绍了值信号接收器和表针信号接收器。根据具体实例展现了它们的用法,并考察了它们差异。最终,提出了怎样结合实际情况正确的选择信号接收器的意见。

总而言之,在挑选信号接收器时,大家应注意信号接收器种类的特点及适用场景,依据实际需要做出决定。若 不确定 到底采用哪一种信号接收器,提议优先选择 表针信号接收器

Go 新手在方式信号接收器选择上可能困惑不已

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!