首页后端开发其他后端知识Golang数组是怎么传递的,方法是什么?

Golang数组是怎么传递的,方法是什么?

时间2024-03-27 05:46:04发布访客分类其他后端知识浏览459
导读:这篇文章主要介绍了title,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望大家通过这篇文章可以有所收获。 下面由golang教程栏目给大家介绍Golang数组的传递,希望对需要的朋友有...
这篇文章主要介绍了title,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望大家通过这篇文章可以有所收获。


下面由golang教程栏目给大家介绍Golang数组的传递,希望对需要的朋友有所帮助!

Golang数组的传递详解

今天小编就为大家分享一篇关于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
}
    

以上就是关于Golang数组是怎么传递的,方法是什么?的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Golang数组是怎么传递的,方法是什么?
本文地址: https://pptw.com/jishu/654018.html
bootstrap-select中拉框清除选中的状态的方法是什么 Bootstrap中modal手动关闭的方法是什么

游客 回复需填写必要信息