亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Golang Slice和map的坑

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

一、淺拷貝同根

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若不是深拷貝或者重新生成新空間,無論通過參數(shù)傳遞還是使用 := 或者 [:]賦值都存在同根性。       

二、擴容擺脫同根

Slice與Array最大的區(qū)別在于Slice不需要指定大小會自動擴容等一些特性,我們在接受并習慣同根性后。Slice在多次append元素時,若滿足擴容策略,這時候內部就會重新申請一塊內存空間,將原本的元素拷貝一份到新的內存空間上。此時其與原本的數(shù)組就沒有任何關聯(lián)關系了,再進行修改值也不會變動到原始數(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

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

那我們就來用代碼來證明一下他們是否真的一致

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.

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

一個有分配空間(Empty)一個沒有分配空間(nil)

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

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

相關文章

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

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

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

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

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

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

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

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

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

    golang解析xml的方法

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

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

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

    一文帶你掌握掌握 Golang結構體與方法

    在 Golang 中,結構體和方法是實現(xiàn)面向對象編程的重要組成部分,也是 Golang 的核心概念之一。在本篇文章中,我們將深入介紹 Golang 結構體與方法的概念、使用方法以及相關的編程技巧和最佳實踐
    2023-04-04
  • go?mod?tidy報錯解決方法詳解

    go?mod?tidy報錯解決方法詳解

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

    golang中xorm的基本使用說明

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

    Go語言實現(xiàn)動態(tài)開點線段樹詳解

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

最新評論