千家信息网

在Go语言中如何使用切片

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关在Go语言中如何使用切片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在 Go 语言中切片是使用非常频繁的一种聚合类型,它代表变长的序列,底层引用
千家信息网最后更新 2026年11月03日在Go语言中如何使用切片

这篇文章给大家分享的是有关在Go语言中如何使用切片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在 Go 语言中切片是使用非常频繁的一种聚合类型,它代表变长的序列,底层引用一个数组对象。一个切片由三个部分构成:指针、长度和容量。指针指向该切片自己第一个元素对应的底层数组元素的内存地址。

切片的类型声明如下:

type slice struct { array unsafe.Pointer len  int cap  int}

多个切片之间可以共享底层数组的数据,并且引用的数组区间可能重叠。利用切片 的这个特性我们可以在原有内存空间中对切片进行反转、筛选和去重等操作,这样就不用声明一个指向新内存的切片来存储结果,从而节省了内存空间以及扩展底层数组的消耗,这在切片长度足够大时效果就会非常显著。

下面这些例子都是在切片底层数组的内存空间上进行的操作,需要注意的是这些操作在底层数组上生成新切片的同时也会更改底层数组。

删除指定位置的元素

下面的函数从原切片中删除索引位置i上的元素

func remove(slice []int, i int) []int {  copy(slice[i:], slice[i+1:])  return slice[:len(slice)-1]}func main() {  s := []int{5, 6, 7, 8, 9}  fmt.Println(remove(s, 2)) // "[5 6 8 9]"}

内置的copy函数可以方便地将一个切片复制另一个相同类型的切片上。

筛选元素

下面的函数从输入的源切片中筛选出满足条件的切片元素,返回一个满足条件的元素组成的新切片。

type funcType func(T) bool //代表筛选逻辑函数,可以按需实现func filter(a []T, f funcType) []T {  b := a[:0]  for _, x := range a {   if f(x) {    b = append(b, x)   }  }  return b}

反转切片

func reverse(a []T) []T {  for i := len(a)/2-1; i >= 0; i-- {    opp := len(a)-1-i   a[i], a[opp] = a[opp], a[i] }  return a}

分组切片

下面的函数接收一个[]int 类型的源切片actions, 返回一个按指定长度分组的嵌套切片(解释起来好难,用过PHP 的同学可以理解为 Go 版本的array_chunk 函数,没用过的看下面例子)。假设切面值为:[]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},设置分组中元素长度batchSize为3,函数调用后返回的分组后的切片为[[0 1 2] [3 4 5] [6 7 8] [9]]

func chunk(actions []int, batchSize int) []int { var batches [][]int for batchSize < len(actions) {   actions, batches = actions[batchSize:], append(batches, actions[0:batchSize:batchSize]) } batches = append(batches, actions)   return batches}func main() { actions := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} batchSize := 3  chunks = chunk(actions, batchSize)  //chunks 为[[0 1 2] [3 4 5] [6 7 8] [9]]}

这里顺便说一下,完整的切片表达式形式如下:

input[low:high:max]

最后一个 max 的作用是,生成的切片的cap(容量)为max - low。

原地去重(只针对可比较的切片类型)

import "sort"func main() { in := []int{3,2,1,4,3,2,1,4,1} // any item can be sorted sort.Ints(in) j := 0 for i := 1; i < len(in); i++ {    if in[j] == in[i] {      continue } j++ in[j] = in[i] } result := in[:j+1] fmt.Println(result) // [1 2 3 4] }

感谢各位的阅读!关于"在Go语言中如何使用切片"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

元素 数组 函数 底层 内存 类型 长度 分组 语言 空间 面的 代表 位置 例子 内容 容量 指向 指针 更多 条件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 今日互联网科技 工业互联网科技新基建 盈实互联网科技 易互联网科技有限公司 佰商互联网科技有限公司 华脉科技工业互联网产品 互联网企业和科技型企业 南山科技园互联网公司有哪些 互联网校园科技培训 浙江互联网科技研学营 健康食品互联网创新科技园项目 中国互联网公司排名锤子科技 锡山区互联网智能科技产品供应 互联网科技资金流入 东营紫格互联网科技 众联互联网络科技 互联网科技对化妆品行业 平安好医生打造互联网科技医疗 科技互联网企业在行动 金融科技 互联网金融 中国互联网科技发展 迪茉互联网科技 来此购互联网科技有限公司 厦门比较好的科技互联网公司 消费医药和互联网科技 明优互联网科技有限公司 中科明德北京互联网科技 科技信息时代互联网发展 上海旺乐尼互联网科技有限公司
0