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)
}
}
744

被折叠的 条评论
为什么被折叠?



