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

make 声明切片

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

go 复制代码
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)

go 复制代码
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 标准库中的格式化占位符

用于将整数以十进制形式输出。

修改切片的值

go 复制代码
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中没有办法通过下标的方式给切片进行扩容

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

会报错的哈;

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

append 给切片扩容,新增数据

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

append:一次性传递多个数据

go 复制代码
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

... 是固定的写法

go 复制代码
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

通过循环进行扩容

go 复制代码
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()函数复制切片

go 复制代码
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()函数复制切片修改后不会影响另一个切片的值

go 复制代码
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的元素

go 复制代码
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

相关推荐
实名上网宋凯宣8 小时前
Django
后端·python·django
我不会起名字3229 小时前
Redis 从 0 到 1(十七):订单 30 分钟不支付自动关闭——ZSet 延迟队列 Go 实现
redis·go·延迟队列·zset·订单
利威尔xu10 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
逃逸线LOF11 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
慢云智慧空间11 小时前
从设备智能到空间理解,空间智能终端解决方案商如何重新定义行业标准
后端
利威尔xu11 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
薛定谔的猫-菜鸟程序员12 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
FungLeo12 小时前
成为全栈·Go 后端篇·从 Node SQLite 到 PostgreSQL:把迁移做成独立交付物
postgresql·golang·sqlite·go·数据库迁移·成为全栈
IT_陈寒13 小时前
SpringBoot多环境配置把我坑惨了,这个踩坑经验你最好看看
前端·人工智能·后端
码事漫谈14 小时前
DeepSeek 搞了个 "Super-agent",但不是超级智能
后端