Go语言之append函数

Go语言之append函数append函数的作用官方解释append函数是向slice里面追加一个或多个元素,然后返回一个和slice一样类型的slice,其签名为funcappend(slice[]T,elements…T)[]Tappend所做的是在切片尾添加元素并返回结果。结果需要返回因为,正如我们手写的Append,底层的数组可能更改。使用示例:x:=[]int{1,2

大家好,又见面了,我是你们的朋友全栈君。

append函数的作用

  • 官方解释append函数是向slice里面追加一个或多个元素,然后返回一个和slice一样类型的slice,其签名为

    func append(slice []T, elements...T) []T
  • append 所做的是在切片尾添加元素并返回结果。结果需要返回因为,正如我们手写的 Append,底层的数组可能更改。
  • 使用示例:
  x := []int{1,2,3}
  x = append(x, 4, 5, 6)
  fmt.Println(x)
  • 打印输出值1 2 3 4 5

使用过程的坑

  • 在使用过程中有以下的坑:
var CateOut []*Category
var Cate []*Category={cate1,cate2,....,cate10}//已经初始化好的值
for j := 0; j < 10; j++ {
        CateOut = append(CateOut, cate[i])
    }
  • 上面的代码运行出来的CateOut结果为10个Cate[9]的值,其中Category为一个struct,但是需要的结果是CateOut完全复制Cate的值,坑。。。。
  • 解决方案,把上述的代码加上临时变量temp,即为:
var CateOut []*Category
var Cate []*Category={cate1,cate2,....,cate10}//已经初始化好的值
for j := 0; j < 10; j++ {
        var temp *Category
        temp=cate[i]
        CateOut = append(CateOut, temp)
    }
  • 问题神奇的就解决了,一脸懵逼。。。
  • 初步分析:应该是每经过一次for循环时都需要新创建一个临时变量temp,用这个干净的临时变量去取值然后赋给CateOut

总结:如果不用temp,则每次赋值给CateOutcate[i]本身就是一个地址,例如”AAA”,这个地址本身并没有改变,改变的只是这个地址指向的对象,因此原先的CateOut结果值会是[AAA],[AAA AAA],[AAA AAA AAA]...即每次增加一个完全相同的地址值,但是在之后的运行过程中地址AAA指向的值已经改变了,所以结果出错。但使用temp就不一样了,每次生成一个新的变量值,把新的地址赋给它,CateOut结果值会是[AAA],[AAA BBB],[AAA BBB CCC]...,这样即使cate[i]这个地址所指向的值发生了改变,也不会影响到最后的结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150076.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么画等距线_十字线画法

    怎么画等距线_十字线画法 等距线的画法本文作者徐庆荣(武汉大学) 等距线画法可分为栅格(光栅)方式和矢量方式二种。栅格方式一般采用“距离变换”等算子实现,算法简练,但在不同方向上的等距线可能不严格等距。矢量方式是按几何关系通过坐标计算获得等距线位置,算法复杂,但精度高。本文介绍的是矢量方式的等距线画法。1.      概述简言之,等距线是指与已知线条(折线或曲线)等距的线条。等距线的应用甚广,例如

    2022年9月2日
    5
  • Android 检測网络是否连接[通俗易懂]

    Android 检測网络是否连接

    2022年1月21日
    45
  • eclipse 卸载 codemix

    eclipse卸载codemix忘了是什么时候eclipse安装了这个视图插件,也许它的确有些不错的功能,但是收费我是不能接受的。卸载时遇到了点麻烦,刚开始点击help的EclipseMarketplace,在Installed中选择codemix的uninstall,操作完成后重启发现插件依然存在,再次重复操作发现下面原来有英文提示,大致意思是有其他应用用到了codemix,无法删除…

    2022年4月7日
    171
  • 目标检测的图像特征提取之(三)Haar特征

    目标检测的图像特征提取之(三)Haar特征目标检测的图像特征提取之(三)Haar特征zouxy09@qq.com1、Haar-like特征      Haar-like特征最早是由Papageorgiou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征。Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩

    2022年4月20日
    51
  • vue 上传插件_vue上传文件前端完整实例

    vue 上传插件_vue上传文件前端完整实例插件描述:vue文件上传插件,可配置更新时间:2020-12-2310:17:131、本插件基于vue+element,使用前请先使用npminstall安装相关依赖2、运行项目npmrunserve3、打包项目npmrunbuild4、dist文件夹内为打包后的文件5、src内components组件为组件的源码6、因为是本地项目,因此不支持预览,但可在本插件基础上进行修改7、e…

    2022年8月16日
    4
  • 什么叫大数据 大数据的概念

    什么叫大数据 大数据的概念1、大数据定义 对于“大数据”(Bigdata)研究机构Gartner给出了定义,“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工

    2022年5月4日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号