1. 程式人生 > >陣列/切片以及擴容的概念 | Go語言基礎

陣列/切片以及擴容的概念 | Go語言基礎

package main // 當前包宣告


func main() { // 程式的入口
    // 陣列
    //     儲存一組相同資料型別的資料結構
    //  連續開闢記憶體,陣列的地址其實是陣列的首地址
    //  一旦定義,大小不能改變
    //  建立陣列 ==> 訪問陣列(賦值,取值)
    var arr [4] int
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3
    arr[3] = 4
    fmt.Println(arr)  // 未賦值為預設值

    // 遍歷陣列
    for i:=0;i<len(arr);i++ //
len()獲取長度,cap()獲取容器儲存的最大數量,對於陣列len()與cap()相同 fmt.Println(arr[i]) } // range 取下標與值 arr := [10]int{1,2,3,4,5,6,7,8,9,10} // "_"處理不需要的返回值 for _, v := range arr{ fmt.Println(v) } // 陣列其他建立方式 var b = [4] int {1,2,3,4} fmt.Println(b) // 根據下標:值 var c = [5] int
{1:1, 3:2} fmt.Println(c) // 用"..." 表示陣列長度推斷 //d := [...] string {"1", "2", "3"} //fmt.Println(d, "\n", len(d)) // 值型別:儲存的是數值本身; 引用型別:儲存資料的記憶體地址 // 切片 // 變長陣列(引用型別的容器,指向底層陣列),不寫長度就是切片 // 建立切片 var a []int fmt.Println(a) var b = [] int {1,2,3} fmt.Println(b)
// make a := make([]int,3,8) // 型別,長度,容量 fmt.Println(a) // 新增元素 var tempSlice [] int tempSlice = append(tempSlice,1,2,3,4,5) fmt.Println(tempSlice) mySlice := []int{1,2,3} tempSlice = append(tempSlice, mySlice...) // 新增切片中的元素`...` fmt.Println(tempSlice) // 根據陣列建立切片,地城陣列就是當前的陣列 // 長度是從start到end切割的資料量,但是容量是start到陣列的末尾. a := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} mySlice := a[0:5] // start:end fmt.Printf("%T %v", a, a) fmt.Printf("%T %v", mySlice, mySlice) // 擴容 // 當向切片中新增資料時,如果沒有超過容量,直接新增,如果超過容量,自動擴容(成倍增長) // 當超過容量,切片指向的就不再原來的陣列,而是記憶體地址中開闢了一個新的陣列. }