专栏首页容器计算Go语言函数间传递切片的问题

Go语言函数间传递切片的问题

GoInAction

Go 语言函数间传递切片,也是在函数间以值传递的方式进行的,由于切片的大小比较小,在函数间复制和传递的成本是比较低的。

// 分配包含100w个整型值的切片
slice := make([]int, 1e6)

// 将 slice 传递到函数 foo
slice = foo(slice)

// 函数 foo 接收一个整型切片,并返回这个切片
func foo(slice []int) []int {
    ...
    return slice
}

成本低的原因是去切片内部的实现只有3个字段,分别是指向底层数组的指针,切片的长度和切片的容量。

也就是说,存储一个切片,只需要24个字节即可。在函数传递的时候,只会复制切片本身,而不会涉及其底层指向的数组。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 自定义方便kubectl中pods的管理

    我猜很多接触 K8S 的同学应该都是运维的同学为主,一般上来说,运维的同学写 Shell 显然是比 Java 程序员专业的,但是当大数据遇到 K8S 的时候,搞...

    runzhliu
  • Go语言函数间传递数组的问题

    大家都知道,Go 语言中,数组是分配连续内存的,也就是说,在函数中传递一个大数组,代价是很高的,例如:

    runzhliu
  • oci runtime error: exec failed: container_linux.go:247: starting container process caused “exec: \“/

    在运行 mpi-operator 之后,想进去容器查看一下,于是执行下面的命令报错。

    runzhliu
  • VMware虚拟机安装Ubuntu和使用UltraISO安装

    选择“I don't want to connect to a wi-fi network right now”并选择“Continue”,进入下一界面

    项勇
  • 「R」第一个Shiny应用(二) 添加控件

    王诗翔呀
  • 深度剖析MapReduce

    【前言:考虑到目前很多公司还都在用这个计算引擎,以及后续要讲的Hive原生支持的计算引擎也是MapReduce,并且为Spark和MapReduce的对比做铺垫...

    大数据学习与分享
  • 详解MapReduce(Spark和MapReduce对比铺垫篇)

    本来笔者是不打算写MapReduce的,但是考虑到目前很多公司还都在用这个计算引擎,以及后续要讲的Hive原生支持的计算引擎也是MapReduce,并且为Spa...

    大数据学习与分享
  • 还在纠结 Flux 或 Relay,或许 Redux 更适合你

    时见疏星
  • 史上最全的centos安装教程

    12.x是一个比较不错的版本,稳定性和功能性都比较出色,各系统的支持版本也较新和全面,适合做教学和个人使用。

    致码DevOps
  • 《笨办法学Python》 第19课手记

    《笨办法学Python》 第19课手记 本节课讲函数和变量(变量和函数的关系是变量作为做函数的参数,定义时是形参,使用时是实参),内容比较简单。 源代码如下: ...

    Steve Wang

扫码关注云+社区

领取腾讯云代金券