主页 > 知识库 > Golang数组的传递详解

Golang数组的传递详解

热门标签:服务外包 呼叫中心市场需求 百度竞价排名 铁路电话系统 AI电销 地方门户网站 网站排名优化 Linux服务器

概念介绍

数组与切片

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为2Gb,它是值类型。切片是对数组一个连续片段的引用,所以切片是一个引用类型。

按值传递和按引用传递

Go语言中函数的参数有两种传递方式,按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。

按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。

Go语言中,在函数调用时,引用类型(slice、map、interface、channel)都默认使用引用传递。

数组传递时的缺点

一般情况下,传递指针的消耗比传递副本的少,尤其是当数组特别大时。具体原因是:

  • 值传递需要完整的复制初始数组并将这份拷贝放到栈中,这将耗费大量运行时间,因而值传递方式的效率比较低。
  • 初始数组的拷贝需要占用额外的内存空间(栈中的内存)
  • 编译程序需要专门产生一部分用来复制初始数组的代码,这将使程序变大。

如何避免

如上面介绍的,有两种方法,第一种利用指针,即引用传递;第二种使用切片,因为切片是引用类型,默认会使用引用传递。

使用指针进行传递

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(arr))
}
func sum(arr *[5]int) int {
  s := 0
  for i := 0; i  len(arr); i++ {
    s += arr[i]
  }
  return s
}

使用切片进行传递

package main
import "fmt"
func main() {
  var arr = [5]int{1, 2, 3, 4, 5}
  fmt.Println(sum(arr[:]))
}
func sum(arr []int) int {
  s := 0
  for i := 0; i  len(arr); i++ {
    s += arr[i]
  }
  return s
}

最后一种方法通常比较常用。

参考文章

1. the way to go

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:
  • Go语言实现二维数组的2种遍历方式以及案例详解
  • Go语言中函数的参数传递与调用的基本方法
  • Go语言二维数组的传参方式

标签:崇左 湖南 黄山 仙桃 湘潭 衡水 兰州 铜川

巨人网络通讯声明:本文标题《Golang数组的传递详解》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266