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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HttpClient4.X发送带参数的Get请求「建议收藏」

    HttpClient4.X发送带参数的Get请求「建议收藏」HttpClient是apache组织下面的一个用于处理HTTP请求和响应的开源工具。所用jar包为httpclient-4.3.6.jar、httpcore-4.3.3.jar、httpmime-4.3.6.jar、commons-codec-1.6.jar。发送Get请求代码如下:packagecom.zkn.newlearn.httpclient;importjava.

    2022年7月22日
    15
  • windows server 2008 r2 DNS服务器配置图文教程「建议收藏」

    windows server 2008 r2 DNS服务器配置图文教程「建议收藏」DNS服务器  DNS服务器用来负责将ip地址和域名进行互相解析。  DNS服务器的作用      简单来说,DNS服务器的作用就是帮助用户使用简单好记的域名来访问网络上的主机和网络服务。  DNS服务器中的记录类型 A地址:用于为特定域名制定对应的IP地址。CNAME:用于为特定域名指定对应的的别名,用户可以通过别名访问这个域名,也可以为特定域名指定多个别名。MX:用于为…

    2022年6月3日
    45
  • 免费公共DNS服务器大全

    免费公共DNS服务器大全港澳台地区DNS国外公共DNS老D推荐使用:目录国内常用公共DNS114DNS:(114.114.114.114;114.114.115.115)114DNS安全版 (114.114.114.119;114.114.115.119)114DNS家庭版 (114.114.114.110;114.114.115.110)阿里AliDNS:(223.5.5.5;&nbs…

    2022年6月22日
    60
  • loadrunner使用教程图文_loadrunner controller怎么使用

    loadrunner使用教程图文_loadrunner controller怎么使用http://v.youku.com/v_playlist/f2058721o1p11.html

    2022年10月14日
    3
  • mybatis一级缓存和二级缓存失效_mybatis二级缓存默认开启吗

    mybatis一级缓存和二级缓存失效_mybatis二级缓存默认开启吗1.缓存介绍Mybatis提供查询缓存,如果缓存中有数据就不用从数据库中获取,用于减轻数据压力,提高系统性能。Mybatis的查询缓存总共有两级,我们称之为一级缓存和二级缓存,如图:一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相…

    2026年2月5日
    4
  • vue生成二维码_html生成二维码

    vue生成二维码_html生成二维码目录qrcodejs2vue-qrqrcodejs2下载qrcodejs2cnpmi-Sqrcodejs2使用<template><spanref=”qrCodeUrl”></span></template><script>importQRCodefrom”qrcodejs2″;exportdefault{data(){return{};},mo

    2022年10月4日
    3

发表回复

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

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