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

Golang Slice和map的坑

 更新時(shí)間:2024年04月15日 11:12:55   作者:七八月份的太陽(yáng)  
Golang中的Slice和Map在內(nèi)存空間上,有一些不同,本文主要介紹了Golang Slice和map的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、淺拷貝同根

func main() {
	nums := [3]int{}
	nums[0] = 1

	fmt.Printf("nums: %v , len: %d, cap: %d\n", nums, len(nums), cap(nums))

	dnums := nums[0:2]
	dnums[0] = 5

	fmt.Printf("nums: %v ,len: %d, cap: %d\n", nums, len(nums), cap(nums))
	fmt.Printf("dnums: %v, len: %d, cap: %d\n", dnums, len(dnums), cap(dnums))
}

輸出:

nums: [1 0 0] , len: 3, cap: 3
nums: [5 0 0] ,len: 3, cap: 3
dnums: [5 0], len: 2, cap: 3

slice若不是深拷貝或者重新生成新空間,無(wú)論通過(guò)參數(shù)傳遞還是使用 := 或者 [:]賦值都存在同根性。       

二、擴(kuò)容擺脫同根

Slice與Array最大的區(qū)別在于Slice不需要指定大小會(huì)自動(dòng)擴(kuò)容等一些特性,我們?cè)诮邮懿⒘?xí)慣同根性后。Slice在多次append元素時(shí),若滿足擴(kuò)容策略,這時(shí)候內(nèi)部就會(huì)重新申請(qǐng)一塊內(nèi)存空間,將原本的元素拷貝一份到新的內(nèi)存空間上。此時(shí)其與原本的數(shù)組就沒(méi)有任何關(guān)聯(lián)關(guān)系了,再進(jìn)行修改值也不會(huì)變動(dòng)到原始數(shù)組。

func main() {
	nums := [3]int{}
	nums[0] = 1

	fmt.Printf("nums: %v , len: %d, cap: %d\n", nums, len(nums), cap(nums))

	dnums := nums[0:2]
	dnums = append(dnums, []int{2, 3}...)
	dnums[1] = 1

	fmt.Printf("nums: %v ,len: %d, cap: %d\n", nums, len(nums), cap(nums))
	fmt.Printf("dnums: %v, len: %d, cap: %d\n", dnums, len(dnums), cap(dnums))
}

輸出 :

nums: [1 0 0] , len: 3, cap: 3
nums: [1 0 0] ,len: 3, cap: 3
dnums: [1 1 2 3], len: 4, cap: 6

三、Empty與nil

Empty

func main() {
    nums := []int{}
    renums := make([]int, 0)
    
    fmt.Printf("nums: %v, len: %d, cap: %d\n", nums, len(nums), cap(nums))
    fmt.Printf("renums: %v, len: %d, cap: %d\n", renums, len(renums), cap(renums))
}

輸出:

nums: [], len: 0, cap: 0
renums: [], len: 0, cap: 0

nil

func main() {
	var nums []int
	fmt.Println(nums,len(nums),cap(nums))
}

輸出

[] 0 0

通過(guò)輸出來(lái)看我們會(huì)發(fā)現(xiàn)不管是數(shù)據(jù)還是len 和cap都是相同的輸出內(nèi)容。

那我們就來(lái)用代碼來(lái)證明一下他們是否真的一致

func main() {
	var nums []int
	renums := make([]int, 0)
	if nums == nil {
		fmt.Println("nums is nil.")
	}
	if renums == nil {
		fmt.Println("renums is nil.")
	}
}

輸出:

nums is nil.

輸出結(jié)果是不是出乎意料!不過(guò)聰明如你肯定已經(jīng)通過(guò)自己的經(jīng)驗(yàn)想到了答案。

一個(gè)有分配空間(Empty)一個(gè)沒(méi)有分配空間(nil)

以上就是我使用slice遇到的坑,這里不再針對(duì)map做特殊分析了。

到此這篇關(guān)于Golang Slice和map的坑的文章就介紹到這了,更多相關(guān)Golang Slice和map內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang 跳出for循環(huán)操作

    golang 跳出for循環(huán)操作

    這篇文章主要介紹了golang 跳出for循環(huán)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 使用Go語(yǔ)言編寫HTTP中間件的示例詳解

    使用Go語(yǔ)言編寫HTTP中間件的示例詳解

    在Go語(yǔ)言中,HTTP中間件是一種處理HTTP請(qǐng)求和響應(yīng)的函數(shù),它可以攔截到請(qǐng)求并對(duì)其進(jìn)行處理,然后再將請(qǐng)求傳遞給下一個(gè)中間件或目標(biāo)處理程序,本文給大家介紹了使用Go語(yǔ)言編寫HTTP中間件的示例,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-01-01
  • golang常用庫(kù)之字段參數(shù)驗(yàn)證庫(kù)-validator使用詳解

    golang常用庫(kù)之字段參數(shù)驗(yàn)證庫(kù)-validator使用詳解

    這篇文章主要介紹了golang常用庫(kù):字段參數(shù)驗(yàn)證庫(kù)-validator使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 一文帶你熟悉Go語(yǔ)言中的for循環(huán)

    一文帶你熟悉Go語(yǔ)言中的for循環(huán)

    這篇文章主要和大家分享一下Go語(yǔ)言中for循環(huán)的定義與使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下
    2022-11-11
  • golang解析xml的方法

    golang解析xml的方法

    這篇文章主要介紹了golang解析xml的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言針對(duì)xml文件的讀取與解析的相關(guān)技巧,需要的朋友可以參考下
    2016-07-07
  • go 代碼格式化和風(fēng)格開發(fā)者指南

    go 代碼格式化和風(fēng)格開發(fā)者指南

    這篇文章主要為大家介紹了go 代碼格式化和風(fēng)格開發(fā)者指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 一文帶你掌握掌握 Golang結(jié)構(gòu)體與方法

    一文帶你掌握掌握 Golang結(jié)構(gòu)體與方法

    在 Golang 中,結(jié)構(gòu)體和方法是實(shí)現(xiàn)面向?qū)ο缶幊痰闹匾M成部分,也是 Golang 的核心概念之一。在本篇文章中,我們將深入介紹 Golang 結(jié)構(gòu)體與方法的概念、使用方法以及相關(guān)的編程技巧和最佳實(shí)踐
    2023-04-04
  • go?mod?tidy報(bào)錯(cuò)解決方法詳解

    go?mod?tidy報(bào)錯(cuò)解決方法詳解

    這篇文章主要為大家介紹了go?mod?tidy報(bào)錯(cuò)解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • golang中xorm的基本使用說(shuō)明

    golang中xorm的基本使用說(shuō)明

    這篇文章主要介紹了golang中xorm的基本使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)開點(diǎn)線段樹詳解

    Go語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)開點(diǎn)線段樹詳解

    線段樹是一種用于高效處理區(qū)間查詢和區(qū)間更新的數(shù)據(jù)結(jié)構(gòu),下面我們就來(lái)看看如何使用Go實(shí)現(xiàn)動(dòng)態(tài)開點(diǎn)線段樹的方式,感興趣的可以了解下
    2025-02-02

最新評(píng)論