中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言數組和切片的區別有哪些

發布時間:2023-05-09 16:28:42 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

這篇“Go語言數組和切片的區別有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Go語言數組和切片的區別有哪些”文章吧。

數組

數組是同一種數據類型元素的集合,數組在定義時需要指定長度和元素類型。

Go語言數組和切片的區別有哪些

例如:[4]int 表示一個包含四個整數的數組,數組的大小是固定的。并且長度是其類型的一部分([4]int[5]int 是不同的、不兼容的類型)。

數組元素可以通過索引來訪問,比如表達式 s[n] 表示訪問第 n 個元素,索引從零開始。

聲明以及初始化

func main() {
    var nums [3]int   // 聲明并初始化為默認零值
    var nums1 = [4]int{1, 2, 3, 4}  // 聲明同時初始化
    var nums2 = [...]int{1, 2, 3, 4, 5} // ...可以表示后面初始化值的長度
    fmt.Println(nums)    // [0 0 0]
    fmt.Println(nums1)   // [1 2 3 4]
    fmt.Println(nums2)   // [1 2 3 4 5]
}

函數參數

如果數組作為函數的參數,那么實際傳遞的是一份數組的拷貝,而不是數組的指針。這也就意味著,在函數中修改數組的元素是不會影響到原始數組的。

Go語言數組和切片的區別有哪些

package main

import (
    "fmt"
)

func Add(numbers [5]int) {
    for i := 0; i < len(numbers); i++ {
        numbers[i] = numbers[i] + 1
    }
    fmt.Println("numbers in Add:", numbers) // [2 3 4 5 6]
}

func main() {
    // declare and initialize the array
    var numbers [5]int
    for i := 0; i < len(numbers); i++ {
        numbers[i] = i + 1
    }

    Add(numbers)
    fmt.Println("numbers in main:", numbers) // [1 2 3 4 5]
}

切片

數組的使用場景相對有限,切片才更加常用。

切片(Slice)是一個擁有相同類型元素的可變長度的序列。它是基于數組類型做的一層封裝。它非常靈活,支持自動擴容。

Go語言數組和切片的區別有哪些

切片是一種引用類型,它有三個屬性:指針長度容量

  • 指針:指向 slice 可以訪問到的第一個元素。

  • 長度:slice 中元素個數。

  • 容量:slice 起始元素到底層數組最后一個元素間的元素個數。

底層源碼定義如下:

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

聲明以及初始化

func main() {
    var nums []int  // 聲明切片
    fmt.Println(len(nums), cap(nums)) // 0 0
    nums = append(nums, 1)   // 初始化
    fmt.Println(len(nums), cap(nums)) // 1 1

    nums1 := []int{1,2,3,4}    // 聲明并初始化
    fmt.Println(len(nums1), cap(nums1))    // 4 4

    nums2 := make([]int,3,5)   // 使用make()函數構造切片
    fmt.Println(len(nums2), cap(nums2))    // 3 5
}

函數參數

當切片作為函數參數時,和數組是不同的,如果一個函數接受一個切片參數,它對切片元素所做的更改將對調用者可見,類似于將指針傳遞給了底層數組。

package main

import (
    "fmt"
)

func Add(numbers []int) {
    for i := 0; i < len(numbers); i++ {
        numbers[i] = numbers[i] + 1
    }
    fmt.Println("numbers in Add:", numbers) // [2 3 4 5 6]
}

func main() {
    var numbers []int
    for i := 0; i < 5; i++ {
        numbers = append(numbers, i+1)
    }

    Add(numbers)

    fmt.Println("numbers in main:", numbers) // [2 3 4 5 6]
}

再看一下上面的例子,把參數由數組變成切片,Add 函數中的修改會影響到 main 函數。

以上就是關于“Go語言數組和切片的區別有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

容城县| 达孜县| 万宁市| 稷山县| 鄢陵县| 桦川县| 民乐县| 荔浦县| 浙江省| 宁陕县| 册亨县| 交口县| 唐河县| 伊吾县| 昔阳县| 蓬溪县| 星座| 长岛县| 瑞丽市| 香河县| 邹城市| 临潭县| 万荣县| 山东| 巴里| 沛县| 龙海市| 邵阳市| 涡阳县| 山阴县| 霍林郭勒市| 股票| 乐亭县| 台江县| 蓝山县| 庄河市| 芮城县| 浠水县| 鄂托克旗| 榆社县| 麻江县|