go-切片的追加

// The append built-in function appends elements to the end of a slice. If
// it has sufficient capacity, the destination is resliced to accommodate the
// new elements. If it does not, a new underlying array will be allocated.

// Append returns the updated slice. It is therefore necessary to store the
// result of append, often in the variable holding the slice itself:
//  slice = append(slice, elem1, elem2)
//  slice = append(slice, anotherSlice...)
// As a special case, it is legal to append a string to a byte slice, like this:
//  slice = append([]byte("hello "), "world"...)
func append(slice []Type, elems ...Type) []Type
  • 该函数的作用是追加元素到切片slice的末尾。
  • 如果slice还有剩余的容量,则该切片被允许容纳新的元素;如果没有剩余容量,一个新的底层数组将会创建。
  • 该函数返回更新的切片,因此新的切片必须存储追加结果,通常更新的切片也包含原切片本身。
package test

import (
    "fmt"
    "testing"
)

func TestSize(t *testing.T) {
    a := []int{1, 2, 3, 4, 5, 6}
    fmt.Printf("aaaa 的地址: %p ,长度 :%d %#v\n", a, len(a), a)
    for i := 0; i < len(a); i++ {
        fmt.Printf("a[%d] 的地址: %p \n", i, &a[i])
    }
  // b 引用a索引为 2的元素
    b := a[2:3]
    fmt.Printf("bbbb 的地址: %p ,长度 :%d %#v\n", b, len(b), b)
    for i := 0; i < 16; i++ {
        b = append(b, 30)
        fmt.Printf("b----b 的地址: %p ,长度 :%d %#v\n", b, len(b), b)
        //fmt.Printf("a----a 的地址: %p ,长度 :%d %#v\n", a, len(a), a)
    }
}

`plain_text
=== RUN TestSize
aaaa 的地址: 0xc000020420 ,长度 :6 []int{1, 2, 3, 4, 5, 6}
a[0] 的地址: 0xc000020420
a[1] 的地址: 0xc000020428
a[2] 的地址: 0xc000020430 // b 的引用地址
a[3] 的地址: 0xc000020438
a[4] 的地址: 0xc000020440
a[5] 的地址: 0xc000020448
b 的地址: 0xc000020430 ,容量: 4,长度 :1 []int{3}
b 的地址: 0xc000020430 ,容量: 4,长度 :2 []int{3, 30}
b 的地址: 0xc000020430 ,容量: 4,长度 :3 []int{3, 30, 30}
b 的地址: 0xc000020430 ,容量: 4,长度 :4 []int{3, 30, 30, 30}

//扩容后,地址改变
b 的地址: 0xc00001a280 ,容量: 8,长度 :5 []int{3, 30, 30, 30, 30}
b 的地址: 0xc00001a280 ,容量: 8,长度 :6 []int{3, 30, 30, 30, 30, 30}
b 的地址: 0xc00001a280 ,容量: 8,长度 :7 []int{3, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00001a280 ,容量: 8,长度 :8 []int{3, 30, 30, 30, 30, 30, 30, 30}
//扩容后,地址改变
b 的地址: 0xc000116180 ,容量: 16,长度 :9 []int{3, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :10 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :11 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :12 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :13 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :14 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :15 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc000116180 ,容量: 16,长度 :16 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
//扩容后,地址改变
b 的地址: 0xc00000a700 ,容量: 32,长度 :17 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :18 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :19 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :20 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :21 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :22 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :23 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :24 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :25 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :26 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :27 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :28 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :29 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :30 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :31 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00000a700 ,容量: 32,长度 :32 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}

//扩容后,地址改变

b 的地址: 0xc00014e000 ,容量: 64,长度 :33 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :34 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :35 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :36 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :37 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :38 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :39 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :40 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}
b 的地址: 0xc00014e000 ,容量: 64,长度 :41 []int{3, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}

Original: https://www.cnblogs.com/burner/p/01qie-pian-de-zhui-jia.html
Author: 浪客禅心
Title: go-切片的追加

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606602/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • VR一体机如何退出FFBM(QFIL)

    前文介绍了通过fastboot命令擦除misc分区,从而退出FFBM的方法。这个方法比较简便,但有不灵的时候,fastboot erase misc命令执行失败,如下图所示。 er…

    Linux 2023年6月7日
    0107
  • 【Hash篇】哈希计算神器-HashMyFiles

    可直接拖放、复制粘贴、添加文件或文件夹的方式来批量计算Hash,操作简便、体积小、免费。这篇来介绍他的汉化和其它一些功能设置—【suy】 目录 1、绿色便携 2、批量算…

    Linux 2023年6月13日
    0106
  • 操作系统实现-进入内核

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这一次我们正式进入内核,编写相关的内核代码,也就是kernel代码 数据类…

    Linux 2023年6月13日
    0102
  • Linux Centos 打开和关闭防火墙

    systemctl status firewalld.service # 查看防火墙状态 systemctl start firewalld.service # 开启防火墙 sys…

    Linux 2023年6月13日
    0113
  • Centos7最小化安装报错There are no enabled repos. Run “yum repolist all” to see the repos you have.解决办法

    原因是缺少CentOS-Base.repo文件,因为我这台机器wget也不能用,所以我是下载到本地sftp上去的,传输的时候一定要在root用户下,否则会无法启动传输 这是报错的完…

    Linux 2023年6月7日
    0104
  • opencv

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月14日
    0109
  • JQ 实现对比两个文本的差异并高亮显示差异部分

    利用jq对比两段文本的差异,差异的内容用不同颜色表示出来。 在线参考demo:http://incaseofstairs.com/jsdiff/ 项目地址:https://gith…

    Linux 2023年6月7日
    0110
  • python3安装pyhook3遇到的问题

    一、 解决办法:安装好:使用C++的桌面开发即可完成。 打开官方网址:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft….

    Linux 2023年6月13日
    0107
  • Redis在C#中的使用及Redis的封装

    Redis是一款开源的、高性能的键-值存储(key-value store)。它常被称作是一款数据结构服务器(data structure server)。Redis的键值可以包括…

    Linux 2023年5月28日
    091
  • Flask 易错点

    1.With上下文管理器 常用: with open("file_name","wb") as f: f.write("hello…

    Linux 2023年6月8日
    087
  • 面试题:Java中为什么只有值传递?

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 经典的问题 形参&实参…

    Linux 2023年6月6日
    0133
  • 【证券从业】金融基础知识-第四章 股票03

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-08 01:28 陈景中 阅读…

    Linux 2023年6月13日
    0100
  • Android(Java)控制GPIO的方法及耗时分析

    前面两篇分别介绍了通过脚本和C代码读写/sys/class/gpio以控制GPIO。实际项目调试时经常还需要在Java代码里控制GPIO,其实现与C代码类似,唯一不同是Androi…

    Linux 2023年6月7日
    090
  • [20211105]索引分裂 块清除 日志增加.txt

    [20211105]索引分裂 块清除 日志增加.txt –//题目起的有点怪,只是我昨天在测试时遇到的怪问题,我通过测试环境演示出来。–//当非主键索引发生…

    Linux 2023年6月13日
    096
  • LVM逻辑卷与磁盘配额

    一、LVM逻辑卷 1、LVM概述 LVM(Logical Volume Manager,逻辑卷管理)重点在于可以弹性地调整文件系统的容量,需要文件的读写性能或是数据的可靠性,LVM…

    Linux 2023年6月6日
    0106
  • redis用法分析

    redis也是一个内存非关系型数据库,它拥有memcache在数据存储上的全部优点,而且在memcache的基础上增加了数据持久性功能,redis用rdb和aof两种方式实现数据持…

    Linux 2023年5月28日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球