06 - 數組/切片以及擴容的概念 | 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)

    // 擴容
    // 當向切片中添加數據時,如果沒有超過容量,直接添加,如果超過容量,自動擴容(成倍增長)
    // 當超過容量,切片指向的就不再原來的數組,而是內存地址中開辟了一個新的數組.
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM