日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Go 數(shù)組與切片的區(qū)別

作者:GeeCode 更新時間: 2023-07-09 編程語言

在 Go 語言中,數(shù)組和切片都是用于存儲一組相同類型的元素,但它們在內(nèi)部結(jié)構(gòu)、長度和使用方式上有很大的區(qū)別。

數(shù)組

在 Go 語言中,數(shù)組是一組固定長度的元素的集合。數(shù)組的長度是在創(chuàng)建數(shù)組時指定的,且不能更改。數(shù)組中的元素類型必須相同,可以是任何基本類型或結(jié)構(gòu)體類型。

下面是一個示例代碼,演示了如何創(chuàng)建和使用數(shù)組:

package main

import "fmt"

func main() {
    // 創(chuàng)建一個長度為 3 的整型數(shù)組
    var arr [3]int

    // 設(shè)置數(shù)組元素的值
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3

    // 打印數(shù)組
    fmt.Println(arr) // 輸出:[1 2 3]
}

在上面的代碼中,我們創(chuàng)建了一個長度為 3 的整型數(shù)組 arr,并為其設(shè)置了元素的值。我們可以使用數(shù)組下標(biāo)訪問數(shù)組中的元素,并使用 fmt.Println 函數(shù)打印整個數(shù)組。

切片

在 Go 語言中,切片是一個動態(tài)長度的序列,可以通過對底層數(shù)組的引用來實現(xiàn)。切片可以用于存儲任何類型的元素,且可以動態(tài)擴展和收縮。

下面是一個示例代碼,演示了如何創(chuàng)建和使用切片:

package main

import "fmt"

func main() {
    // 創(chuàng)建一個長度為 3 的整型數(shù)組
    arr := [3]int{1, 2, 3}

    // 創(chuàng)建一個長度為 2 的整型切片,引用數(shù)組的前兩個元素
    slice := arr[:2]

    // 打印切片和底層數(shù)組
    fmt.Println(slice) // 輸出:[1 2]
    fmt.Println(arr)   // 輸出:[1 2 3]
}

在上面的代碼中,我們創(chuàng)建了一個長度為 3 的整型數(shù)組 arr,并使用數(shù)組的前兩個元素創(chuàng)建了一個長度為 2 的整型切片 slice。我們可以使用 : 操作符來創(chuàng)建一個切片,其中左側(cè)的下標(biāo)表示切片的起始位置,右側(cè)的下標(biāo)表示切片的結(jié)束位置(不包括該位置)。如果左側(cè)的下標(biāo)省略,則默認(rèn)為 0;如果右側(cè)的下標(biāo)省略,則默認(rèn)為數(shù)組的長度。我們可以使用 fmt.Println 函數(shù)打印切片和底層數(shù)組。

區(qū)別

數(shù)組和切片在 Go 語言中有很大的區(qū)別,主要體現(xiàn)在以下幾個方面:

內(nèi)部結(jié)構(gòu)

數(shù)組在內(nèi)存中是一段連續(xù)的內(nèi)存空間,元素的類型和長度都是固定的。切片在內(nèi)存中由一個指向底層數(shù)組的指針、長度和容量組成,長度表示切片當(dāng)前包含的元素個數(shù),容量表示切片可以擴展的最大元素個數(shù)。

長度

數(shù)組的長度在創(chuàng)建時指定,不能更改。切片的長度可以動態(tài)擴展或收縮,可以根據(jù)需要自由調(diào)整。

使用方式

數(shù)組在使用時需要明確指定下標(biāo)訪問元素,不能動態(tài)生成。切片可以使用 append 函數(shù)向其末尾添加元素,可以使用 copy 函數(shù)復(fù)制切片,也可以使用 make 函數(shù)創(chuàng)建指定長度和容量的切片。

示例代碼

下面是一個完整的示例代碼,演示了 Go 語言中數(shù)組和切片的區(qū)別:

package main

import "fmt"

func main() {
    // 創(chuàng)建一個長度為 3 的整型數(shù)組
    var arr [3]int

    // 設(shè)置數(shù)組元素的值
    arr[0] = 1
    arr[1] = 2
    arr[2] = 3

    // 創(chuàng)建一個長度為 2 的整型切片,引用數(shù)組的前兩個元素
    slice := arr[:2]

    // 向切片末尾添加一個元素
    slice = append(slice, 4)

    // 打印數(shù)組和切片
    fmt.Println(arr)   // 輸出:[1 2 3]
    fmt.Println(slice) // 輸出:[1 2 4]

    // 復(fù)制切片
    slice2 := make([]int, len(slice))
    copy(slice2, slice)

    // 打印切片和復(fù)制后的切片
    fmt.Println(slice)  // 輸出:[1 2 4]
    fmt.Println(slice2) // 輸出:[1 2 4]
}

在上面的代碼中,我們創(chuàng)建了一個長度為 3 的整型數(shù)組 arr,并使用數(shù)組的前兩個元素創(chuàng)建了一個長度為 2 的整型切片 slice。我們向切片末尾添加了一個元素,并使用 fmt.Println 函數(shù)打印了數(shù)組和切片。接著,我們使用 make 函數(shù)創(chuàng)建了一個長度和 slice 相同的空切片 slice2,并使用 copy 函數(shù)將 slice 的元素復(fù)制到 slice2 中。最后,我們使用 fmt.Println 函數(shù)打印了 sliceslice2

總結(jié)

在 Go 語言中,數(shù)組和切片都是用于存儲一組相同類型的元素,但它們在內(nèi)部結(jié)構(gòu)、長度和使用方式上有很大的區(qū)別。數(shù)組是一組固定長度的元素的集合,長度在創(chuàng)建時指定,不能更改,使用時需要明確指定下標(biāo)訪問元素。切片是一個動態(tài)長度的序列,長度可以動態(tài)擴展或收縮,使用時可以動態(tài)生成、復(fù)制或添加元素。希望本文對您理解 Go 語言中數(shù)組和切片的區(qū)別有所幫助。

原文鏈接:https://blog.csdn.net/GeeCode/article/details/131465820

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新