在Go/Golang中,我一般应该依赖指针还是First class函数?

ugmeyewa  于 2023-04-03  发布在  Go
关注(0)|答案(1)|浏览(113)

假设我想写一个函数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
}

有没有人能说明一下它的好处,不管是性能还是可读性,或者我是在试图成为一个学究,这是武断的?

bnl4lu3b

bnl4lu3b1#

在您提供的特定示例中,指针没有明显的好处。使用指针可能会降低效率和可读性:

*性能/效率

使用指针对于小数据类型(如整数)可能会慢一些,这是由于解引用的开销。当使用指针时,您会增加一个额外的间接层。程序必须首先查找内存地址,然后获取存储在该地址的值。这可能会导致缓存未命中并降低程序的速度。使用指针进行简单操作(如两个整数求和)没有真实的的优势。

*可读性

在这种情况下,使用指针会降低代码的可读性。当你想直接操作数据或在函数之间共享数据而不创建副本时,指针是很有用的。在你的例子中,不需要操作原始数据或在函数之间共享数据。非指针版本更容易理解,对于Go和其他使用指针的语言来说更符合习惯。
下面是一些在Go语言中使用指针的例子:

*处理大型数据结构时

使用指针可以避免不必要的数据复制,从而保存内存并提高性能。如果您正在处理大型结构或数组,则传递指向数据的指针比复制整个结构更有效。

*需要修改原始数据时

如果你想让一个函数修改原始数据(例如,更新一个结构体字段),你应该传递一个指向数据的指针。这允许函数直接修改内存中的数据,并且调用者可以看到这些更改。

*实现某些数据结构或算法时:

在某些情况下,当实现某些数据结构(例如,链表)时,使用指针是必要的或更有效的。

相关问题