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]
作者:流年少年
出处:https://www.cnblogs.com/ishoulgodo/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
支付宝
微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号