假设我想写一个函数sum
,它对两个整数求和并输出结果。这是我的第一React:
func main() {
println(sum(2,3))
}
func sum(x int, y int) int{
return x + y
}
然而,从Go代码中,我看到很多人喜欢使用指针,更接近于这样:
func main() {
x:= 2;
y:= 3;
println(add(&x, &y))
}
func sum( x *int, y *int) int {
return *x + *y
}
有没有人能说明一下它的好处,不管是性能还是可读性,或者我是在试图成为一个学究,这是武断的?
1条答案
按热度按时间bnl4lu3b1#
在您提供的特定示例中,指针没有明显的好处。使用指针可能会降低效率和可读性:
*性能/效率:
使用指针对于小数据类型(如整数)可能会慢一些,这是由于解引用的开销。当使用指针时,您会增加一个额外的间接层。程序必须首先查找内存地址,然后获取存储在该地址的值。这可能会导致缓存未命中并降低程序的速度。使用指针进行简单操作(如两个整数求和)没有真实的的优势。
*可读性:
在这种情况下,使用指针会降低代码的可读性。当你想直接操作数据或在函数之间共享数据而不创建副本时,指针是很有用的。在你的例子中,不需要操作原始数据或在函数之间共享数据。非指针版本更容易理解,对于Go和其他使用指针的语言来说更符合习惯。
下面是一些在Go语言中使用指针的例子:
*处理大型数据结构时:
使用指针可以避免不必要的数据复制,从而保存内存并提高性能。如果您正在处理大型结构或数组,则传递指向数据的指针比复制整个结构更有效。
*需要修改原始数据时:
如果你想让一个函数修改原始数据(例如,更新一个结构体字段),你应该传递一个指向数据的指针。这允许函数直接修改内存中的数据,并且调用者可以看到这些更改。
*实现某些数据结构或算法时:
在某些情况下,当实现某些数据结构(例如,链表)时,使用指针是必要的或更有效的。