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)

大家都在看

  • CentOS7安装redis并配置外网可访问(局域网可参考)

    1、安装gcc编辑器 安装redis需要依赖gcc环境,执行如下命令安装: yum&#xA0;install&#xA0;-y&#xA0;gcc 如果机器没有…

    Linux 2023年5月28日
    096
  • linux配置密钥登录

    一、前言: ssh远程登录密码认证的方式有三种,password、Keyboard Interactive、Public Key前面两种方式就是密码认证,含义都是一样大同小异。第三…

    Linux 2023年6月8日
    073
  • Python 练习题:用索引取出LIST中的值

    请用索引取出下面list的指定元素,分别为Apple,Python,Lisa -*- coding: utf-8 -*- 请用索引取出下面list的指定元素 L = [ [‘App…

    Linux 2023年6月8日
    089
  • 302跳转

    题目如下 打开环境显示如下 点击Give me Flag发生跳转,并且多了index.html 题目提示为HTTP临时重定向,302代表临时转移,通过F12的网络功能找到了302 …

    Linux 2023年6月7日
    079
  • 最新超详细Linux下LNMP环境搭建

    一、了解LNMP系统 当前两个主要应用的架构:LNMP和LAMP,都是指一组通常一起使用来运行动态网站或者服务器的自由软件名称。 LAMP的全称是:Linux + Apache +…

    Linux 2023年6月15日
    0139
  • Redis 主从复制

    Redis主从复制的原理 当建立主从关系时,slave配置slaveof 当redis生成dump.rdb文件时,工作过程如下 redis主进程fork一个子进程 fork出来的子…

    Linux 2023年5月28日
    084
  • 在Windows平台用Visual C++ 2022 (v143)编译PDCurses

    综述 PDCurses是一个开源的跨平台curses库,它提供了一组函数,开发者可以用这组函数在终端(Console、Terminal)上设置光标的位置和字符的显示样式。本文介绍在…

    Linux 2023年6月8日
    098
  • Macbook pro 2015 安装Windows后再安装Linux

    我尝试了Debian,Ubuntu,Kali Linux都不能启动Windows。每次装完,磁盘格式都会自动变成MBR。结果今天尝试了安装Fedora 36,居然轻轻松松就成功了。…

    Linux 2023年6月6日
    090
  • Linux 0.11源码阅读笔记-块设备驱动程序

    块设备驱动程序 块设备驱动程序负责读写块设备数据。内核代码使用缓冲区块与块设备(如磁盘)间接交换数据,缓冲区数据通过块设备驱动程序和块设备交换。 [En] The block de…

    Linux 2023年5月27日
    080
  • Python递归遍历目录下所有文件

    递归遍历目录下所有文件 方法一 import os def gci(filepath): #遍历filepath下所有文件,包括子目录 files = os.listdir(fil…

    Linux 2023年6月13日
    0100
  • 《卡死你3000》批量修改被控机密码,秘钥

    批量生成密码之产生随机数: 默认产生16位大小写加数字密码 批量生成密码,并写入nodelist.csv: cs产生所有被控机旧密码并写入nodelist.ps1 运行这个脚本后,…

    Linux 2023年6月13日
    064
  • 玩转SpringBoot之捣鼓 Redis

    我们都知道,把首页数据放到Redis里,能够加快首页数据的访问速度。但是我们要如何准确又快速的将 Redis 整合到自己的 SpringBoot2.x 项目中呢?今天阿淼就带大家爬…

    Linux 2023年5月28日
    0102
  • Linux目录结构

    一、基本介绍 linux文件系统采用级层的树状目录结构,最上层的就是根目录 / ,在此基础上创建其他目录。在linux中一切皆为文件 二、详细目录介绍 /bin(不可随意更改):该…

    Linux 2023年6月6日
    0124
  • Linux 学习笔记

    Linux 学习笔记 作者:Grey 原文地址: 博客园:Linux 学习笔记 CSDN:Linux 学习笔记 说明 本文如果没有特别说明,环境是 CentOS 7, 主要是日常学…

    Linux 2023年5月27日
    0107
  • css中*{}和*html,body{}的区别

    css里面定义*{padding:0px;margin: 0px;} 相当于选择器,代表html所有的元素,包括html标签、body标签等; {}大括号里面写入需要给定的属性和属…

    Linux 2023年6月13日
    082
  • 闪存和SSD存储之间有什么区别?

    PC硬件术语经常被互换使用,其缩写被削减,或者对同一组件有多个词。以DRAM/RAM/memory为例。这三个词都是指同一个PC组件,它被安装在CPU插座旁边的瘦小插槽中&#821…

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