详解go中make声明切片, 修改切片,append给切片扩容,合并切片,复制切片

 更新时间:2026年09月02日 08:46:56   作者:何人陪我共长生  
在Go里用make声明切片、修改元素、用 append 扩容和合并、用 copy 复制,是日常操作切片最核心的一套流程,下面给大家介绍go中make声明切片, 修改切片,append给切片扩容,合并切片,复制切片,感兴趣的朋友一起看看吧

make 声明切片

make([]类型, 长度, 容量)

kage main
import ("fmt")
// 入口函数
func main()  {
  // make 声明切片,长度是4, 容量是10
  var sliceArr1 = make([]int, 4, 10)
  fmt.Printf("切片:%v", sliceArr1)
}

切片:[0 0 0 0]
为啥是0呢?因为:numbers---> 默认值: 0

切片的的容量 cap(sliceArr1)

package main
import ("fmt")
// 入口函数
func main()  {
  // make 声明切片,长度是4, 容量是10
  var sliceArr1 = make([]int, 4, 10)
  fmt.Printf("切片的容量:%d", cap(sliceArr1))
}

切片的容量:10

%d

在 Go 语言(Golang)中,
%d 是 fmt 标准库中的格式化占位符
用于将整数以十进制形式输出。

修改切片的值

package main
import ("fmt")
// 入口函数
func main()  {
  // make 声明切片,长度是4, 容量是10
  var sliceArr1 = make([]int, 4, 10)
  sliceArr1[0] =10
  sliceArr1[1] =1
  fmt.Printf("切片:%v", sliceArr1)
}

切片:[10 1 0 0]

go中没有办法通过下标的方式给切片进行扩容

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceArr1 []int
  // go中没有办法通过下标的方式给切片进行扩容,下面的写法会报错的
  sliceArr1[0] =10
  fmt.Printf("%v",sliceArr1 )
}

会报错的哈;
go中没有办法通过下标的方式给切片进行扩容

append 给切片扩容,新增数据

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceArr1 []int
  // 给sliceArr1扩容,然后在赋值给sliceArr1
  sliceArr1 =append(sliceArr1, 100)
  sliceArr1 =append(sliceArr1, 10)
  fmt.Printf("%v",sliceArr1 )
}

append:一次性传递多个数据

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceArr1 []int
  // 给sliceArr1扩容,一次性传递多个数据
  sliceArr1 =append(sliceArr1, 100,10,111)
  fmt.Printf("%v",sliceArr1 )
}

将一个切片合并到另外一个切片中去

sliceArr1 =append(sliceArr1, sliceArr2...)
把sliceArr2的数据追加到liceArr1
... 是固定的写法

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceArr1 = []int {12,3,100}
  var sliceArr2 = []int {101,201}
  // 给sliceArr1扩容,把sliceArr2的数据追加到liceArr1
  sliceArr1 =append(sliceArr1, sliceArr2...)
  fmt.Printf("%v",sliceArr1 )
}

[2 3 100 101 201]

通过循环进行扩容

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceA []int
  for i := 0; i < 3; i++ {
    sliceA = append(sliceA,i)
    fmt.Printf("值:%v,长度:%d, 容量%d\n",sliceA[i], len(sliceA),cap(sliceA) )
  }
 fmt.Printf("最后的值:%v", sliceA)
}

值:0,长度:1, 容量1
值:1,长度:2, 容量2
值:2,长度:3, 容量4
最后的值:[0 1 2]

为啥容量是4,因为这个是golang中的扩容策略。
容量不一定等于长度。

copy()函数复制切片

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceA = []int {1,2,3,4}
  var sliceB =make([]int,4,4)
  // 把切片A赋值给切片B
  copy(sliceB,sliceA)
  fmt.Printf("最后的值sliceA:%v\n", sliceA)
  fmt.Printf("最后的值sliceB:%v", sliceB)
}

最后的值sliceA:[1 2 3 4]
最后的值sliceB:[1 2 3 4]

copy()函数复制切片修改后不会影响另一个切片的值

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceA = []int {1,2,3,4}
  var sliceB =make([]int,4,4)
  // 把切片A赋值给切片B
  copy(sliceB,sliceA)
  sliceA[0] = 1000
  fmt.Printf("最后的值sliceA:%v\n", sliceA)
  fmt.Printf("最后的值sliceB:%v", sliceB)
}

最后的值sliceA:[1000 2 3 4]
最后的值sliceB:[1 2 3 4]
只更改了切片A的值,B没有发生变化哈

Go语言中并没有删除切片元素的专用方法

Go语言中并没有删除切片元素的专用方法,我们可以使用切片本身的特性来删除元素

删除下标为2的元素

package main
import ("fmt")
// 入口函数
func main()  {
  var sliceA = []int {0,1,2,3,4,5,6,7}
  // sliceA[:2] 左闭右开, 0,1
  // sliceA[3:]左闭右开, 3,4,5,6,7
  // append合并切片的时候最后一个元素要加...
  sliceA  = append(sliceA[:2],sliceA[3:]...)
  fmt.Printf("最后的值sliceA:%v", sliceA)
}

最后的值sliceA:[0 1 3 4 5 6 7]

到此这篇关于go中make声明切片, 修改切片,append给切片扩容,合并切片,复制切片的文章就介绍到这了,更多相关go make声明切片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go语言字符串的拼接和切片方法总结

    go语言字符串的拼接和切片方法总结

    在go语言中,因为字符串只能被访问,不能被修改,所以进行字符串拼接的时候,golang都需要进行内存拷贝,造成一定的性能消耗,这篇文章主要给大家介绍了关于go语言字符串的拼接和切片的相关资料,需要的朋友可以参考下
    2022-11-11
  • Go语言 init函数的具体使用

    Go语言 init函数的具体使用

    init()函数是Go语言中一种特殊的函数,用于在包被导入时执行一次性的初始化操作,本文就来介绍一下Go语言 init函数的具体使用,感兴趣的可以了解一下
    2024-09-09
  • go grpc安装使用教程

    go grpc安装使用教程

    gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。这篇文章主要介绍了go grpc安装使用教程,需要的朋友可以参考下
    2018-02-02
  • golang常用加密解密算法总结(AES、DES、RSA、Sha1、MD5)

    golang常用加密解密算法总结(AES、DES、RSA、Sha1、MD5)

    在项目开发过程中,当操作一些用户的隐私信息,本文主要主要介绍了golang常用加密解密算法总结(AES、DES、RSA、Sha1MD5),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • go语言中fallthrough的用法说明

    go语言中fallthrough的用法说明

    这篇文章主要介绍了go语言中fallthrough的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go语言转换所有字符串为大写或者小写的方法

    Go语言转换所有字符串为大写或者小写的方法

    这篇文章主要介绍了Go语言转换所有字符串为大写或者小写的方法,实例分析了ToLower和ToUpper函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • golang程序进度条实现示例详解

    golang程序进度条实现示例详解

    这篇文章主要为大家介绍了golang程序实现进度条示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Go语言开发k8s之Service操作解析

    Go语言开发k8s之Service操作解析

    这篇文章主要为大家介绍了Go语言开发k8s之Service操作解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • go编译标签build tag注释里语法详解

    go编译标签build tag注释里语法详解

    这篇文章主要为大家介绍了go编译标签build tag注释里语法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go实现JWT认证中间件的项目实战

    Go实现JWT认证中间件的项目实战

    本文将介绍在Gin框架中实现完整的JWT认证方案,同时包含灵活的 Redis 集成选项,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08

最新评论