Golang之路---02 基础语法——数组与切片(slice)

数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的。

func main() {
 //1.声明数组,并给数组的每个元素赋值
 var arr [3]float32
 arr[0]=1.1
 arr[1]=2.2
 arr[2]=3.3

 //2.声明并初始化数组
 //2.1
 var arr2 [3]int=[3]int{1,2,3}
 //2.2 等价于
  arr3 :=[3]int{1,2,3}

 //3.使用...让Golang语言自己根据实际情况来分配空间
  arr4 :=[...]int{1,2,3,4}

 //使用 fmt 的 %T 打印数据类型
    //数组[1.100000 2.200000 3.300000] 的类型是 [3]float32
   fmt.Printf("数组%d 的类型是 %T\n",arr,arr) 
   //数组[1 2 3] 的类型是 [3]int  
   fmt.Printf("数组%d 的类型是 %T\n",arr2,arr2)
   //数组[1 2 3] 的类型是 [3]int
   fmt.Printf("数组%d 的类型是 %T\n",arr3,arr3)
   //数组[1 2 3 4] 的类型是 [4]int
   fmt.Printf("数组%d 的类型是 %T\n",arr4,arr4)
}

切片

切片创建

func main() {
	//切片的构造
	arr := [5]int{1,2,3,4,5}

//1.表示从索引1开始,知道索引为2的元素
	slice1 := arr[1:3]
	//slice1 的长度为:2,容量为:4
	fmt.Printf("slice1 的长度为:%d,容量为:%d\n", len(slice1), cap(slice1))
	/*
	在切片时,若不指定第三个数,那么切片终止索引会一直到原数组的最后一个数。
	而如果指定了第三个数,那么切片终止索引只会到原数组的该索引值。
	即第三个数组不影响长度,影响容量
	*/
	slice2 := arr[1:3:3]
	//slice2 的长度为:2,容量为:2
	fmt.Printf("slice2 的长度为:%d,容量为:%d\n", len(slice2), cap(slice2))

//2.声明一个未指定大小的数组来定义切片,切片不需要说明长度
    //声明整型切片
    var numList []int	
	//numList 的长度为:0,容量为:0
    fmt.Printf("numList 的长度为:%d,容量为:%d\n", len(numList), cap(numList))

//3.make()函数创建切片
//make([]T, length, capacity) 其中capacity为可选参数
    slice3 := make([]int, 6)
	//slice3 的长度为:6,容量为:6
	fmt.Printf("slice3 的长度为:%d,容量为:%d\n", len(slice3), cap(slice3))

}
切片初始化

len() 和 cap() 函数

切片是可索引的,并且可以由 len() 方法获取长度。

切片提供了计算容量的方法 cap() 可以测量切片最长可以达到多少。

func main() {
	//直接初始化切片,[]表示是切片类型,{1,2,3}初始化值依次是1,2,3.其cap=len=3
	s := []int{1,2,3}
	//s 的长度为:3,容量为:3
	fmt.Printf("s 的长度为:%d,容量为:%d\n", len(s), cap(s))
    arr := [...]int{1,2,3,4}
	//切片s2直接引用数组arr
	//s2 的长度为:4,容量为:4
    s2 := arr[:]
	fmt.Printf("s2 的长度为:%d,容量为:%d\n", len(s2), cap(s2))
    //s := arr[startIndex:endIndex] 将arr中从下标startIndex到endIndex-1 下的元素创建为一个新的切片
    //arr[start:] 表示从start一直截取到最后一元素
	//arr[:end] 表示从第一个元素开始截取到最后一个元素
	s3 := arr[0:2]
	//s3 的长度为:2,容量为:4
	fmt.Printf("s3 的长度为:%d,容量为:%d\n", len(s3), cap(s3))
    //切片之间相互进行初始化
	s4 := s3[1:2]
	//s4 的长度为:1,容量为:3
	fmt.Printf("s4 的长度为:%d,容量为:%d\n", len(s4), cap(s4))

}

注:一个切片在未初始化之前默认为 nil,长度为 0

切片的操作(append,copy)
func main() {
	var nslice []int
	//切片[]的长度为0
	printSlice(nslice)
    //向切片中添加一个元素
	nslice=append(nslice, 1)
	//切片[1]的长度为1
	printSlice(nslice)
	//向切片中同时添加多个元素
	//切片[1 2 3 4 5]的长度为5
	nslice=append(nslice, 2,3,4,5)
	printSlice(nslice)
	nslice2 := make([]int,2*len(nslice))
	copy(nslice2,nslice)
	//切片[1 2 3 4 5 0 0 0 0 0]的长度为10
	printSlice(nslice2)
}

func printSlice(x []int){
	fmt.Printf("切片%v的长度为%d\n",x,len(x))
}

你可能感兴趣的:(Golang,golang,java,javascript)