【Duke】数组和切片 007 - PingPongGooo/GoFoundation GitHub Wiki

// 数组的声明
var a [3]int // 声明并初始化为默认0值
a[0] = 1
b := [3]int{1,2,3}  // 声明同时初始化
c := [2][2]{{1,2},{3,4}} // 多维数组初始化\


func TestArrayInit(t *testing.T)  {
	var arr [3]int
	t.Log(arr[1],arr[2])   // 0 0

	arr1 := [4]int{1,2,3,4}
	arr3 := [...]int{1,2,3,4}
	t.Log(arr1[1])
	t.Log(arr1,arr3)
	
}

数组的遍历

func TestArrayTravel(t *testing.T)  {
	arr3 := [...]int{1,3,4,5}
	for i:=0; i<len(arr3);i++ {
		t.Log(arr3[i])
	}

	for idx, e:= range  arr3{
		t.Log(idx,e)
	}
	
	for _,e:=range  arr3{
		t.Log(e)
	}

}
// // 数组截取
// a[开始索引(包含),结束索引(不包含)]
// a := [...]int{1,2,3,4,5}
// a[1:2]
// a[1:3]
// a[1:len(a)]
// a[1:]
// a[:3]

func TestArraySection(t *testing.T){
	arr3  := [...]int{1,2,3,4,5}
	arr3_sec := arr3[3:]
t.Log(arr3_sec)
}


package slice_test

import "testing"

func TestSliceInit(t *testing.T)  {
	var s0 []int
	t.Log(len(s0),cap(s0))

	s0 = append(s0,1)
	t.Log(len(s0),cap(s0))

	s1 := []int{1,2,3,4}
	t.Log(len(s1),cap(s1))

	s2 := make([]int,3,5)
	t.Log(len(s2),cap(s2))

	t.Log(s2[0], s2[1], s2[2])

	s2 = append(s2,1)
	t.Log(s2[0], s2[1], s2[2],s2[3])
}

切片声明

var s0 []int s0 = append(s0,1)

s := []int{} s1 := []int{1,2,3} s2 := make([]int, 2,4)

// []type. len, cap // 其中len个元素会被初始化为默认零值,未初始化元素不可以访问。

func TestSliceGrowing(t *testing.T)  {
	s := []int{}
	for i:=0; i < 10; i++{
		s =append(s, i)
		t.Log(len(s), cap(s))
	}
}

切片共享存储结构

func TestSliceShareMemory(t *testing.T)  {
	year := []string{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}
	Q2 := year[3:6]
	t.Log(Q2)

	t.Log(Q2,len(Q2),cap(Q2))

	summer := year[5:8]
	t.Log(summer,len(summer),cap(summer))
	summer[0] = "Unknow"
	t.Log(Q2)
	
}

数组 VS 切片

1. 容量是否可伸缩
2. 是否可以进行比较


数组可比较,  切片不可比较。只能和nil进行比较。