欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言中三種容器類型的數(shù)據(jù)結(jié)構(gòu)詳解

 更新時間:2025年02月14日 09:29:41   作者:我是區(qū)塊鏈小學(xué)生  
在?Go?語言中,有三種主要的容器類型用于存儲和操作集合數(shù)據(jù)這篇文章主要為大家介紹了三者的使用與區(qū)別,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

基本概念

在 Go 語言中,有三種主要的容器類型用于存儲和操作集合數(shù)據(jù):數(shù)組(Array)切片(Slice)映射(Map)。以下是它們的詳細(xì)說明和對比:

1. 數(shù)組(Array)

定義
數(shù)組是具有 固定長度 的容器,存儲相同類型的元素。長度在聲明時確定,不可變。

特點(diǎn)

  • 值類型:賦值或傳參時會復(fù)制整個數(shù)組。
  • 內(nèi)存連續(xù)分配,訪問速度快。

聲明與初始化

// 聲明長度為3的整型數(shù)組,默認(rèn)初始化為零值
var arr1 [3]int

// 聲明并初始化
arr2 := [3]int{1, 2, 3}

// 自動推斷長度
arr3 := [...]int{4, 5, 6}

使用場景

適合需要固定大小且對內(nèi)存敏感的場合(如底層算法優(yōu)化),但日常開發(fā)中較少直接使用。

2. 切片(Slice)

定義

切片是基于數(shù)組的 動態(tài)長度 抽象,提供更靈活的容器。切片本身是引用類型,底層指向一個數(shù)組。

特點(diǎn)

  • 動態(tài)擴(kuò)容:長度可動態(tài)增長(通過 append 函數(shù))。
  • 引用語義:賦值或傳參時傳遞指針,多個切片可能共享底層數(shù)組。

聲明與初始化

// 直接聲明切片(nil切片)
var s1 []int

// 通過數(shù)組創(chuàng)建切片
arr := [5]int{1, 2, 3, 4, 5}
s2 := arr[1:3] // 包含元素 [2, 3]

// 使用 make 創(chuàng)建切片
s3 := make([]int, 3, 5) // 長度3,容量5

// 直接初始化
s4 := []int{1, 2, 3}

常用操作

s := []int{1, 2}
s = append(s, 3)      // 追加元素 → [1, 2, 3]
sub := s[1:]          // 截取子切片 → [2, 3]

使用場景

絕大多數(shù)集合操作的默認(rèn)選擇(如動態(tài)列表、數(shù)據(jù)流處理)。

3. 映射(Map)

定義

映射是 鍵值對(Key-Value) 的無序集合,通過哈希表實現(xiàn),鍵必須可哈希(如 int、string)。

特點(diǎn)

  • 動態(tài)擴(kuò)容:自動增長以容納更多鍵值對。
  • 引用語義:賦值或傳參時傳遞指針。
  • 鍵唯一,值可重復(fù)。

聲明與初始化

// 聲明一個映射(nil映射,不可直接使用)
var m1 map[string]int

// 使用 make 初始化
m2 := make(map[string]int)

// 直接初始化
m3 := map[string]int{
    "Alice": 25,
    "Bob":   30,
}

常用操作

m := map[string]int{}
m["Charlie"] = 28    // 添加或修改鍵值對
age, ok := m["Bob"]  // 檢查鍵是否存在(ok為bool)
delete(m, "Alice")   // 刪除鍵

使用場景

快速查找、去重計數(shù)、配置管理等需要鍵值關(guān)聯(lián)的場景。

對比總結(jié)

特性數(shù)組(Array)切片(Slice)映射(Map)
長度固定動態(tài)可變動態(tài)可變
類型語義值類型(復(fù)制整個數(shù)據(jù))引用類型(共享底層數(shù)組)引用類型(共享存儲)
內(nèi)存分配編譯時確定運(yùn)行時動態(tài)分配運(yùn)行時動態(tài)分配
訪問方式索引(0-based)索引(0-based)鍵(Key)
主要用途固定大小數(shù)據(jù)塊動態(tài)集合操作鍵值對關(guān)聯(lián)存儲

注意事項

切片共享底層數(shù)組

多個切片可能共享同一底層數(shù)組,修改一個切片可能影響其他切片。

arr := [3]int{1, 2, 3}
s1 := arr[:]  // s1 = [1,2,3]
s2 := s1[1:]  // s2 = [2,3]
s2[0] = 100   // s1變?yōu)?[1,100,3]

映射的無序性

遍歷映射時,鍵值對的順序不固定(Go 1.12+ 在擴(kuò)容時隨機(jī)化遍歷順序)。

并發(fā)安全

切片和映射在并發(fā)讀寫時需加鎖(或使用 sync.Map)。

到此這篇關(guān)于Go語言中三種容器類型的數(shù)據(jù)結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)Go數(shù)據(jù)結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang中struct和interface的基礎(chǔ)使用教程

    golang中struct和interface的基礎(chǔ)使用教程

    Go不同于一般的面向?qū)ο笳Z言,需要我們好好的學(xué)習(xí)研究,下面這篇文章主要給大家介紹了關(guān)于golang中struct和interface的基礎(chǔ)使用的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 如何組織Go代碼目錄結(jié)構(gòu)依賴注入wire使用解析

    如何組織Go代碼目錄結(jié)構(gòu)依賴注入wire使用解析

    這篇文章主要為大家介紹了如何組織Go代碼目錄結(jié)構(gòu)依賴注入wire使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Go語言中關(guān)閉帶緩沖區(qū)的頻道實例分析

    Go語言中關(guān)閉帶緩沖區(qū)的頻道實例分析

    這篇文章主要介紹了Go語言中關(guān)閉帶緩沖區(qū)的頻道,實例分析了帶緩沖區(qū)頻道的原理與用法,以及關(guān)閉帶緩沖區(qū)頻道的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • GO中sync包自由控制并發(fā)示例詳解

    GO中sync包自由控制并發(fā)示例詳解

    這篇文章主要為大家介紹了GO中sync包自由控制并發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • golang中的并發(fā)和并行

    golang中的并發(fā)和并行

    這篇文章主要介紹了golang中的并發(fā)和并行用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go切片導(dǎo)致rand.Shuffle產(chǎn)生重復(fù)數(shù)據(jù)的原因與解決方案

    Go切片導(dǎo)致rand.Shuffle產(chǎn)生重復(fù)數(shù)據(jù)的原因與解決方案

    在 Go 語言的實際開發(fā)中,切片(slice)是一種非常靈活的數(shù)據(jù)結(jié)構(gòu),然而,由于其底層數(shù)據(jù)共享的特性,在某些情況下可能會導(dǎo)致意想不到的 Bug,本文將詳細(xì)分析 rand.Shuffle 之后,切片中的數(shù)據(jù)出現(xiàn)重復(fù)的問題,探討其根本原因,并給出最佳解決方案,需要的朋友可以參考下
    2025-02-02
  • Golang開發(fā)Go依賴管理工具dep安裝驗證實現(xiàn)過程

    Golang開發(fā)Go依賴管理工具dep安裝驗證實現(xiàn)過程

    這篇文章主要為大家介紹了Golang開發(fā)Go依賴管理工具dep安裝驗證及初始化一系列實現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Golang正整數(shù)指定規(guī)則排序算法問題分析

    Golang正整數(shù)指定規(guī)則排序算法問題分析

    這篇文章主要介紹了Golang正整數(shù)指定規(guī)則排序算法問題,結(jié)合實例形式分析了Go語言排序算法操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2017-01-01
  • go:gin輸出日志文件方式

    go:gin輸出日志文件方式

    這篇文章主要介紹了go:gin輸出日志文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 詳解如何通過Go來操作Redis實現(xiàn)簡單的讀寫操作

    詳解如何通過Go來操作Redis實現(xiàn)簡單的讀寫操作

    作為最常用的分布式緩存中間件——Redis,了解運(yùn)作原理和如何使用是十分有必要的,今天來學(xué)習(xí)如何通過Go來操作Redis實現(xiàn)基本的讀寫操作,需要的朋友可以參考下
    2023-09-09

最新評論