最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中切片長度和容量的區(qū)別示例詳解

 更新時間:2024年01月24日 10:53:58   作者:Nex1395  
切片長度與容量在Go中很常見,切片長度是切片中可用元素的數(shù)量,而切片容量是從切片中第一個元素開始計算的底層數(shù)組中的元素數(shù)量,這篇文章主要給大家介紹了關于Golang中切片長度和容量區(qū)別的相關資料,需要的朋友可以參考下

首先要知道在Golang中,切片的底層實際就是數(shù)組。

1.切片的長度:

切片的長度指切片中元素的數(shù)量,可以使用len()函數(shù)查詢其切片的長度。

示例1:

package main

import "fmt"

func main(){
    slice := []int{1,3,2,6,4}
    # 調(diào)用len查看長度
    length := len(slice)
    fmt.Printf("slice01的長度是:%v", length)
}

// 輸出結果
// slice的長度是:5

在上面代碼中,變量length就是切片的長度(結果是5)

2.切片的容量:

切片的容量是指切片底層數(shù)組的長度,可以使用cap()函數(shù)查看容量

示例2:

package main

import "fmt"

func main(){
    slice := []int{1,3,2,6,4}
    // 調(diào)用cap查看容量
    capacity := cap(slice)
    fmt.Printf("slice01的容量是:%v", capacity)
}

// 輸出結果
// slice的容量是:5

在上面代碼中,變量capacity就是切片的容量(結果也是5)

3.通過上面兩個示例看不出區(qū)別,我們看下面的示例:

示例3

package main

import "fmt"

func main(){
    // 通過make函數(shù)來創(chuàng)建slice, 4表示切片的長度, 10標識切片的容量
    slice := make([]int, 4, 6)
    length := len(slice)
    capacity := cap(slice)
    fmt.Printf("slice01的長度是:%v\n", length)
    fmt.Printf("slice01的容量是:%v\n", capacity)
}

// 輸出結果
// slice01的長度是:4
// slice01的容量是:6

你可以想象成:當執(zhí)行slice := make([]int, 4, 10)的時候,程序在底層創(chuàng)建了一個長度為6的數(shù)組,切片slice引用了前面4個元素,就生成了slice這個切片,當前切片值是:{0, 0, 0, 0},剩下的2個元素則暫時沒有引用。

4.通過對切片的增加,查看切片與底層數(shù)組的變化

我們知道,golang中切片和數(shù)組的主要區(qū)別在于數(shù)組是定長的,切片是變長的。但我們在示例3中定義了切片的容量是6,那如果超過6個元素了,將會發(fā)生什么呢?

示例4

package main

import "fmt"

func main(){
    // 通過make函數(shù)來創(chuàng)建slice, 4表示切片的長度, 10標識切片的容量
    slice := make([]int, 4, 6)
    length := len(slice)
    capacity := cap(slice)
    fmt.Printf("slice01的長度是:%v\n", length)
    fmt.Printf("slice01的容量是:%v\n", capacity)
    
    //第一次向切片slice內(nèi)添加元素
    slice = append(slice, 1)
    //打印slice的長度,容量,內(nèi)存地址(slice[0]的內(nèi)存地址)
    fmt.Printf("\n\n第一次結果:")
    fmt.Printf("slice的長度是:%v\n", len(slice))
    fmt.Printf("slice的容量是:%v\n", cap(slice))
    fmt.Printf("slice的內(nèi)存地址是:%v\n", &slice[0])
    
    // 第二次向slice內(nèi)添加元素
    slice = append(slice, 1)
    //打印slice的長度,容量,內(nèi)存地址(slice[0]的內(nèi)存地址)
    fmt.Printf("\n\n第二次結果:")
    fmt.Printf("slice的長度是:%v\n", len(slice))
    fmt.Printf("slice的容量是:%v\n", cap(slice))
    fmt.Printf("slice的內(nèi)存地址是:%v\n", &slice[0])
    
    // 第三次向slice內(nèi)添加元素
    slice = append(slice, 1)
    //打印slice的長度,容量,內(nèi)存地址(slice[0]的內(nèi)存地址)
    fmt.Printf("\n\n第三次結果:")
    fmt.Printf("slice的長度是:%v\n", len(slice))
    fmt.Printf("slice的容量是:%v\n", cap(slice))
    fmt.Printf("slice的內(nèi)存地址是:%v\n", &slice[0])
}

// slice01的長度是:4
// slice01的容量是:6


// 第一次結果:slice的長度是:5
// slice的容量是:6
// slice的內(nèi)存地址是:0xc00000e390


// 第二次結果:slice的長度是:6
// slice的容量是:6
// slice的內(nèi)存地址是:0xc00000e390


// 第三次結果:slice的長度是:7
// slice的容量是:12
// slice的內(nèi)存地址是:0xc000060060

通過示例4我們可以發(fā)現(xiàn):我們初始化切片長度為4, 容量為6的時候。

當?shù)谝淮魏偷诙蜗蚯衅瑑?nèi)添加元素后,只有切片的長度增加,容量和內(nèi)存地址都沒改變

當?shù)谌蜗蚯衅瑑?nèi)添加元素后,長度增加了1,容量變成了之前的2倍,內(nèi)存地址也發(fā)生了改變。

由此我們可以推斷出:

**總結:**當切片的元素長度超過了默認的容量之后,程序會重新創(chuàng)建一個底層數(shù)組和切片綁定,且新的數(shù)組的長度為原來的兩倍(切片的容量變成原來的兩倍)

5. 注意用法:

示例5

package main

import "fmt"

func main() {
	slice := make([]int, 4, 4)
	slice2 := make([]int, 4, 5)
    // 調(diào)用下方定義的test函數(shù)
	test(slice)
	test(slice2)

	// 輸出兩個切片調(diào)用test函數(shù)后的結果
	fmt.Printf("slice的結果: %v\n", slice)
	fmt.Printf("slice2的結果: %v\n", slice2)

}

func test(s []int) {
	s = append(s, 1)
	for i := 0; i < len(s); i++ {
		s[i] = 100
	}
}

// slice的結果: [0 0 0 0]
// slice2的結果: [100 100 100 100]

切片容量不同,導致了最終結果不同。

總結

到此這篇關于Golang中切片長度和容量區(qū)別的文章就介紹到這了,更多相關Golang切片長度和容量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談Golang是如何讀取文件內(nèi)容的(7種)

    淺談Golang是如何讀取文件內(nèi)容的(7種)

    這篇文章主要介紹了淺談Golang是如何讀取文件內(nèi)容的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Golang 統(tǒng)計字符串字數(shù)的方法示例

    Golang 統(tǒng)計字符串字數(shù)的方法示例

    本篇文章主要介紹了Golang 統(tǒng)計字符串字數(shù)的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 源碼解析gtoken替換jwt實現(xiàn)sso登錄

    源碼解析gtoken替換jwt實現(xiàn)sso登錄

    這篇文章主要為大家介紹了源碼解析gtoken替換jwt實現(xiàn)sso登錄的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Golang Http 驗證碼示例實現(xiàn)

    Golang Http 驗證碼示例實現(xiàn)

    這篇文章主要介紹了Golang Http 驗證碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • go實現(xiàn)限流功能示例

    go實現(xiàn)限流功能示例

    這篇文章主要為大家介紹了go實現(xiàn)限流功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go語言的type?func()用法詳解

    Go語言的type?func()用法詳解

    在Go語言中,函數(shù)的基本組成為:關鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語句,這篇文章主要介紹了Go語言的type?func()用法,需要的朋友可以參考下
    2022-03-03
  • 總結Go語言中defer的使用和注意要點

    總結Go語言中defer的使用和注意要點

    Go語言中的defer關鍵字實現(xiàn)比較特殊的功能,這篇文章給大家總結了關于Go語言中defer的使用和注意要點,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • 使用Golang創(chuàng)建單獨的WebSocket會話

    使用Golang創(chuàng)建單獨的WebSocket會話

    WebSocket是一種在Web開發(fā)中非常常見的通信協(xié)議,它提供了雙向、持久的連接,適用于實時數(shù)據(jù)傳輸和實時通信場景,本文將介紹如何使用 Golang 創(chuàng)建單獨的 WebSocket 會話,包括建立連接、消息傳遞和關閉連接等操作,需要的朋友可以參考下
    2023-12-12
  • golang占位符%v、%+v、%#v舉例詳解

    golang占位符%v、%+v、%#v舉例詳解

    這篇文章主要給大家介紹了關于golang占位符%v、%+v、%#v的相關資料,Go語言中的占位符通常用于格式化輸出,它們以%開頭,后跟一個字符,表示要轉換的數(shù)據(jù)類型,需要的朋友可以參考下
    2024-05-05
  • golang中對

    golang中對"引用傳遞"的誤解

    這篇文章主要介紹了golang中對“引用傳遞”的誤解,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06

最新評論

阳朔县| 茶陵县| 乌鲁木齐县| 津市市| 喀喇| 阿荣旗| 哈尔滨市| 祁东县| 龙川县| 监利县| 临江市| 张家口市| 新安县| 海盐县| 任丘市| 罗平县| 浪卡子县| 博乐市| 来宾市| 辉南县| 宝鸡市| 东乡县| 怀仁县| 忻城县| 朔州市| 常德市| 定西市| 鹤壁市| 临夏市| 饶河县| 南川市| 察哈| 长汀县| 旬阳县| 开封市| 天峻县| 咸宁市| 永登县| 吴桥县| 武平县| 高州市|