1、创建

一般使用make创建,make([]string,0)

var s []int或s:=new([]int)          //nil切片,  切片是nil,即Slice内的指针是nil
var t = []int{}或var u = make([]int, 0)  //空切片,Slice内的指针指向长度为0的底层数组
var u = make([]int, 3)   //3个内部元素是零值

2、追加

append时会首先使用可用容量cap部分,如果cap不够扩容就会分配一个新的底层数组,并将所有元素拷贝至新地址。并且新的底层数组会按照一定策略进行扩容:在切片的容量小于1000个元素时会成倍地增加容量,一旦元素个数超过1000容量的增长因子会设为1.25,即每次增加25%的容量。

3、截取

左闭右开;截取slice时如果没有指定max,则容量跟随原数组;

其实截取时底层数组不变,改变的是起始位置、len、cap;

4、删除

需要先知道要删除的元素的下标index,且s1[:index]指的是[0, index)区间的元素,左闭右开。

var s1 = []int{1, 2, 3, 4}                 // 初始化一个切片
var index = 2                              // 要删除的下标
s1 = append(s1[:index], s1[index+1:]...)   //删除下标为index的元素

5、拷贝

切片之间的赋值只会拷贝Slice结构体,使用copy深拷贝时要确保目的切片有足够且相等的空间。

copy(目标切片,源切片),拷贝过程中是直接对应位置的拷贝

var s1 = []int{1, 2}        // 初始化一个切片
var s2 = make([]int, 2)     // 初始化一个空的切片,cap为2
copy(s2, s1)                // 将s1拷贝给s2
s2[0] = 99                  // 改变s2[0]
fmt.Println(s1[0])          // 打印s1[0]

6、二维切片

对于二维切片,只能手动去为第二维度分配空间。

var s = make([][]int, n)
for i := 0; i < n; i++ { s[i] = make([]int, n) }

Golang之slice操作相关推荐

  1. Golang 中 Slice的分析与使用(含源码)

    文章目录 1.slice结构体 2.slice初始化 3.append操作 4.slice截取 5.slice深拷贝 6.值传递还是引用传递 参考文献 众所周知,在golang中,slice(切片)是 ...

  2. golang连接mysql操作示例增删改查

    golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动.这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/ ...

  3. 字符串切片slice操作(字符串)

    切片slice操作可以让我们快速的提取子字符串,标准格式为: [起始偏移量start:终止偏移量end:步长step] 典型操作: 操作和说明 示例 结果 [:] 提取整个字符串 "abcd ...

  4. golang中slice切片的修改操作

    本文主要介绍go语言中切片slice的增删修改操作. 如果我们需要往切片中追加元素,可以使用内置的append()函数.这个函数接受一个需要被追加的切片,以及一个或者多个需要被追加的元素.如果我们需要 ...

  5. 【Golang】Slice数组组成和扩容机制

    Golang Slice 结构体 写这个的初衷是因为看到一个 b站的UP主(幼麟实验室)做 Golang 的视频有感而生,想通过视频深入剖析一下内容,顺便当作一个输出,记录自己学习的过程. up主的连 ...

  6. golang切片slice详解:介绍、内存分析、定义、遍历、切片可以继续切片、切片可以动态增长、切片的拷贝及底层原理

    切片的引入 [1]切片(slice)是golang中一种特有的数据类型 [2]数组有特定的用处,但是却有一些呆板(数组长度固定不可变),所以在 Go 语言的代码里并不是特别常见.相对的切片却是随处可见 ...

  7. golang nil slice 和 empty slic 的区别 空切片

    var slice []int 创建出来的 slice 其实是一个 nil slice.它的长度和容量都为0.和nil比较的结果为true.这里比较混淆的是empty slice,empty slic ...

  8. golang连接mysql操作示例增删改查(已经测试)

    golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动.这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/ ...

  9. [golang]nil slice和empty slice的区别

    前言 在开发的时候,会遇到对于nil slice和empty slice的问题,往往在声明了slice之后,在使用的时候却出现了问题. 问题 以下是错误的用法,会报数组越界的错误,因为只是声明了sli ...

最新文章

  1. 爬虫笔记9实例股票数据
  2. 浏览器插件:一款解决谷歌浏览器吃内存神器插件,你值得试一试!
  3. 信息学奥赛一本通C++语言——1061:求整数的和与均值
  4. 产品经理学习总结(2)——实用的BRD产品文档模板参考
  5. JavaScript正则匹配
  6. 50个精心收集的惊人的jquery绚丽插件--功能全覆盖
  7. kafka的topic操作入门
  8. 记一次服务器被攻击事件
  9. 【通关计划】进入IT培训魔域这个红海,ITbegin为何选择从高校编程教
  10. Vitis下Linux应用程序开发流程
  11. 零基础搭建完全免费个人静态博客
  12. 天才小毒妃 第966章 不死不灭的痛苦
  13. 怎样实现url隐形转发?
  14. 浅谈共轭梯度法的原理
  15. SitePoint播客40:Google的谷歌
  16. 前端图片 - icon Fonts
  17. 软件工程毕业设计 SSM房屋租赁管理系统(源码+论文)
  18. 跨平台移动应用开发是否真的是一个好选择?
  19. 半导体中的非平衡载流子
  20. idea的tomcat改端口号_如何修改tomcat默认端口号8080的方法

热门文章

  1. webservice axis1.4生成客户端
  2. 让XShell保存日志教程
  3. mysql校对规则设计编码命令
  4. 技术人员应该如何培养
  5. Java的IO操作(二) - 带缓冲区的流对象、写入基本数据类型、实现命令行中的copy命令...
  6. 数组的扩展-搜集自无忧脚本
  7. after exercise
  8. quick sort
  9. deepl真的有取代一般翻译的能力,这吞吐量和稳定性...亲测有效
  10. macOS的关于屏幕录制的快捷键和操作