2.7 指针类型和值类型

当你写go代码时,很自然的就会问自己,这里应该使用值类型还是指针类型?这有2则好消息。首先,尽管接下来我们要讨论,但是答案都是一样的。

  • 一个局部变量赋值
  • 结构体字段
  • 函数返回值
  • 传递给函数的参数
  • 方法的接收者

其次,如果你不确定使用那个,那么就使用指针。

正如我们所见,传递值类型是一种确保数据不可变的好方法(在函数内的改变不会影响到调用的代码)。有些时候,这是你需要的行为,但是更多时候,这不是你想要的。

即使你不打算改变数据,也要考虑到创建一个大结构体拷贝的开销。相反地,你可能有一个小结构体,例如:

type Point struct {
    X int
    Y int
}

这种情况下,拷贝一个结构体的开销可能被直接访问XY抵消了,而不是通过间接访问。

另外,这些都是些很微妙的情况,除非你是遍历成千上万个指针,否则你不会发现有任何差别。

链接

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

results matching ""

    No results matching ""