go语言之切片

go语言数组和切片的异同:
Go 语言切片是对数组的抽象。
Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,
Go中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),
与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
下面看具体实例

package main

import (
	"fmt"
)

func myPrint(a []int) {
	// 输出切片的长度 容量 值 类型
	fmt.Printf("len=%d cap=%d v=%v T=%T\n",len(a),cap(a),a,a)
}
func main() {
	// 定义一个切片
	var sli1 []int
	// 为这个切片赋初值
	sli1 = []int{1,2,3}
	fmt.Println(sli1)
	// 使用make定义切片 第一个参数表示类型,第二个参数表示长度
	var sli2 = make([]int,5)
	fmt.Println(sli2)
	myPrint(sli2)
	// 使用make定义切片,并定义容量
	var sli3 = make([]int,5,10)
	sli3 = []int{1,2,3,4,5,6,7,8,9,0,11}  // 发现切片可以被增加容量
	// sli3 = [][]int{    //这种方法是错误的;因为之前已经定义了sli3的类型
	// 	{1,2},
	// 	{3,4},
	// }
	myPrint(sli3)
	// 定义并初始化切片
	var sli4 = []int{0,9,8}
	// go的快捷方法
	sli5 := []int{5,6,7}
	myPrint(sli4)
	myPrint(sli5)
	// 切片的截取和数组一样
	myPrint(sli5[:2])

	// 如果定义的空切片;那么返回的就是 空 nil;在go语言中空就是nil
	var sli6 []int
	if sli6 == nil {
		fmt.Println("nil")
	}
	// 切片中的append 和copy函数,append就是向切片弹如一部分数据并返回一个新的切片;
	sli5 = append(sli5,2,4)
	myPrint(sli5)
	// copy(sli5,sli4)
	// myPrint(sli5)
	copy_sli := make([]int,len(sli5),cap(sli5)*2)
	copy(copy_sli,sli5)  // copy数组sli5到copy_sli中
	copy(copy_sli,sli4)
	fmt.Println(copy_sli)

	// 使用range遍历数组;会返回数组的索引和值;注意如果不想使用某一个返回值,需要使用 下划线 _ 站位
	for index,value := range copy_sli {
		fmt.Println(index,value)
	}
	// 忽略使用返回index索引的实例
	for _,value := range copy_sli {
		fmt.Println(value)
	}
	// 忽略使用返回value的实例
	for index,_ := range copy_sli {
		fmt.Println(index)
	}
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haeasringnar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值