package main import( "fmt" ) func main() { var intArr [5]int = [...]int{1,2,3,4,5} //定義一個數組 slice := intArr[2:4] //第二個(包含)下標到第四個下標(不包含) fmt.Println("slice = ", slice) //[3 4] fmt.Println("slice len = ", len(slice)) fmt.Println("slice cap = ", cap(slice)) //切片的容量 //經過make建立切片 var makeSlice []int = make([]int, 2, 5)//第一個參數爲類型, 第二個參數爲len, 第三個爲cap fmt.Println("makeSlice = ", makeSlice) //數字類型(int, float)默認爲0, sting 爲'', bool爲false 和數組同樣 fmt.Println("makeSlice len = ", len(makeSlice)) fmt.Println("makeSlice cap = ", cap(makeSlice)) //相似於make var mslice []string = []string{"zhangsan", "lisi", "wangwu", ""} mslice[3] = "ermazi" fmt.Println("mslice = ", mslice) fmt.Println("mslice len = ", len(mslice)) fmt.Println("mslice cap = ", cap(mslice)) //遍歷 for i:=0; i < len(mslice); i++ { fmt.Printf("i = %v, v = %v\n", i, mslice[i]) } for j,mv := range mslice { fmt.Printf("j = %v, mv = %v\n", j, mv) } //細節 var testArr [5]int = [...]int{1,2,3,4,5} testSlice := testArr[0:len(testArr)] //取出數組裏面全部值 testArr[:]能夠簡寫成這樣 startSlice := testArr[:4] //從0開始到第四個下標 endSlice := testArr[2:] // 從2開始到結束 testSlice2 := startSlice[1:3]//slice也能夠從slice種切,和數組的規則同樣 testSlice[2] = 100 //slice 是引用,更改了值都會影響其它關聯的指向變量的值(testArr, starSlice對應的都改變了) fmt.Println("testArr = ", testArr) fmt.Println("testSlice = ", testSlice) fmt.Println("testSlice2 = ", testSlice2) fmt.Println("endSlice = ", endSlice) //testArr的值改變了;它也得改變 //append,copy的使用 var apSlice []int = make([]int, 5, 10) apSlice = append(apSlice, 1, 2, 3, 4, 5) //追加元素 fmt.Println("apSlice = ", apSlice) //[0 0 0 0 0 1 2 3 4 5] apSlice = append(apSlice, apSlice...)//也能夠追加一個slice fmt.Println("apSlice = ", apSlice) // [0 0 0 0 0 1 2 3 4 5 0 0 0 0 0 1 2 3 4 5] var coppySlice []string = []string{"zhangsan", "lisi", "wangwu"} var dslice []string = make([]string, 3, 3) copy(dslice, coppySlice) //把copySlice的值拷貝到dslice種 fmt.Println("dslice = ", dslice)//[zhangsan lisi wangwu] var minSlice []string = make([]string, 1, 1)//只有一個長度 copy(minSlice, coppySlice) //此時不會出現越界的錯誤,只是拷貝了一個值 fmt.Println("minSlice = ", minSlice)//[zhangsan] //字符串底層是一個byte數組,因此能夠經過slice來操做 str := "hello,gogogo" strSlice := str[2:6] //這個返回的string,感受應該是slice fmt.Printf("strSlice = %v, %T\n", strSlice, strSlice) arr := []byte(str) //string 轉換成byte切片 fmt.Printf("arr = %v, %T\n", arr, arr) arr[0] = 'H' //arr[1] = '我' //中文會報錯 str = string(arr[:]) //[]byte切片轉換成字符串 fmt.Println(str) //Hello,gogogo //經過[]rune切片解決中文 arr2 := []rune(str) arr2[1] = '我' str = string(arr2) fmt.Println(str) //H我llo,gogogo //練習 斐波那契 fmt.Println(test(8)) //[1 1 2 3 5 8 13 21] } func test(n int) []uint64 { var slice []uint64 = make([]uint64, n) for i := 0; i < n; i++ { if i <= 1 { slice[i] = 1 } else { num := slice[i-1] + slice [i-2] slice[i] = num } } return slice }