• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Golang数组的传递详解

    概念介绍

    数组与切片

    数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为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语言二维数组的传参方式
    上一篇:Go语言range关键字循环时的坑
    下一篇:Golang中如何对MySQL进行操作详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Golang数组的传递详解 Golang,数组,的,传递,详解,