本文主要介绍go语言中切片slice的增删修改操作。

如果我们需要往切片中追加元素,可以使用内置的append()函数。这个函数接受一个需要被追加的切片,以及一个或者多个需要被追加的元素。如果我们需要往一个切片中追加另一个切片,那么我们必须使用...操作符来告诉Go语言将被添加进来的切片当成多个元素。例:

s := []string{"A", "B", "C", "D", "E", "F", "G"}
t := []string{"K", "L", "M", "N"}
u := []string{"m", "n", "o", "p", "q", "r"}
s = append(s, "h", "i", "j") //添加单一的值
s = append(s, t...) //添加切片中的所有值
s = append(s, u[2:5]...) //添加一个子切片
b := []byte{'U', 'V'}
letters := "WXY"
b = append(b, letters...) //将一个字符串字节添加进一个字节切片中
fmt.Printf("%v\n%s\n", s, b)
//--------------结果----------------------
[A B C D E F G h i j K L M N o p q]
UVwxy

有时我们不仅想往切片的末尾插入项,也想往切片的前面或者中间插入项。下面的例子使用了我们自定义的 Insert() 函数,它接收一个我们要插入切片的参数、一个用于插入的切片以及需插入切片的索引位置:

func Insert(slice, insertion []interface{}, index int) []interface{} {result := make([]interface{}, len(slice)+len(insertion))at := copy(result, slice[:index])at += copy(result[at:], insertion)copy(result[at:], slice[index:])return result
}

注意,如果所传入的索引位置为0,那么第一条语句中的slice[:index]为slice[:0],因此无需进行复制。类似的,如果所传入的索引位置大于等于切片的长度,则最后一条复制语句为slice[len(slice):](即一个空切片),因此也无需复制。

使用Go语言的标准切片语法可以将元素从切片的开头和末尾删除,但是将其从中间删除就费点事儿了。看看下面的例子,分别描述如何从开头,从末尾,从中间删除切片元素:

s := []string{"A", "B", "C", "D", "E", "F", "G"}
s = s[2:] //从开始处删除是s[:2]子切片
e := []string{"A", "B", "C", "D", "E", "F", "G"}
e = e[:4] //从末尾处删除是e[4:]子切片
func Remove(slice []interface{}, start, end int) []interface{} {result := make([]interface{}, len(slice)-(end-start))at := copy(result, slice[:start])copy(result[at:], slice[end:])return result
}
//--------------------另一种更为简便的写法-----------------------
func Remove(slice []interface{}, start, end int) []interface{} {return append(slice[:start], slice[end:]...)
}

转载于:https://blog.51cto.com/liuxp0827/1355494

golang中slice切片的修改操作相关推荐

  1. golang中slice切片使用的误区

    一.前言 最近在项目代码中,发现了一种写法,如下所示: //期望是能把id顺序写到切片,把切片占满,元素数为10个 Ids1 := make([]int64, 10) for _, v := rang ...

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

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

  3. golang中的切片

    slice 注意,切片代表的窗口是无法向左扩展的 顺便提一下把切片的窗口向右扩展到最大的方法.对于s4来说,切片表达式s4[0:cap(s4)]就可以做到 一个切片的容量可以被看作是透过这个窗口最多可 ...

  4. golang中的切片及内存拷贝

    十分钟讲明白, golang, Go 语言切片(Slice) 2017年08月21日 16:39:21 kingmax54212008 阅读数:8782 https://blog.csdn.net/k ...

  5. python中的切片能否修改元祖_Python列表的增删改查和元祖

    一.定义列表 1.names = ['mike','mark','candice','laular'] #定义列表 2.num_list = list(range(1,10)) #range生成1-1 ...

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

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

  7. Go 语言编程 — 高级数据类型 — Slice 切片

    目录 文章目录 目录 切片 len() 和 cap() 函数 append() 和 copy() 函数 空切片 切片 Golang 中,切片(Slice)的本质是长度不固定的.可以追加元素的特殊数组, ...

  8. LDAP命令介绍---ldappasswordmodify口令修改操作

    此实用程序可用于在目录服务器中执行 LDAP 口令修改操作用法: ldappasswordmodify {选项}其中 {选项} 包括:-a, --authzID {authzID}应更改口令的用户条目 ...

  9. golang 定义一个空切片_Golang slice切片操作之切片的追加、删除、插入等

    本文介绍了Golang slice切片操作之切片的追加.删除.插入等,分享给大家,具体如下: 一.一般操作 1,声明变量,go自动初始化为nil,长度:0,地址:0,nil func main(){ ...

最新文章

  1. Spring mvc-kaptcha 验证码
  2. php 接收序列化数据,PHP如何序列化数据?
  3. 为何要fork()两次来避免产生僵尸进程?
  4. java dozer 深度_java – Dozer深度映射设置为Set
  5. 推荐系统中的召回算法--协同过滤
  6. 2019入门级云主机选型测试报告
  7. ★LeetCode(429)——N叉树的层序遍历(JavaScript)
  8. Redis-key的设计技巧
  9. 注意,Windows7只能安装Python 3.8以下的版本
  10. OGNL表达式学习笔记
  11. TSC打印机,使用java打印二维码
  12. Egret和LayaBox
  13. 如何使用Xcode的Targets来管理开发和生产版本的构建( 还不懂,复制过来后面再看)
  14. Python四大神兽(迭代器生成器闭包装饰器)
  15. js控制禁用退格键回到上一个页面
  16. mysql rds云数据库_云数据库 RDS MySQL快速入门手册
  17. 自建DHCP TFTP服务 用PXE启动实现无人值守安装Centos6
  18. 腾讯云TVP大佬十年心血MySQL工作笔记,看完还不懂MySQL来打我!
  19. 重磅!《深度学习 500 问》已更新,(附完整下载)
  20. 和数集团首款自研虚拟数字人上线,“始祖龙”带你跨山海,链未来

热门文章

  1. java 循环展开_Java在Debug的时候,有些变量能无限展开(循环了)?
  2. linux系统ip策略筛选器,在Linux下基于路由策略的IP地址控制
  3. Java综合知识总结_基础篇
  4. Java设计模式(七大原则和单例模式篇)
  5. RASPBERRY 端口(GPIO)基本测试
  6. BH38旋转编码器初步测试
  7. 虚拟机centos7繁忙关不了机的解决方法(转载)
  8. mysql 关联 update_关于SQL UPDATE关联更新
  9. php变量定义的位置,php变量一般放在哪个位置
  10. matlab 工具箱application compiler的作用_matlab机器人工具箱下载与使用