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

go slice不同初始化方式性能及數(shù)組比較詳解

 更新時(shí)間:2022年11月28日 11:13:15   作者:沙彌  
這篇文章主要為大家介紹了go slice不同初始化方式性能及數(shù)組比較示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

go語(yǔ)言開(kāi)發(fā)中,slice是我們常用的數(shù)據(jù)類型之一,也是因?yàn)樗撵`活性,自己也很少使用數(shù)組,當(dāng)然我也知道它的一些特性,不過(guò)沒(méi)有真實(shí)的去驗(yàn)證它,因?yàn)榇蠖鄶?shù)使用場(chǎng)景沒(méi)必要對(duì)code太過(guò)苛刻,但是如果封裝作為包為其他邏輯提供使用的時(shí)候,我覺(jué)得還是要在意這些事的,畢竟作為公共包使用時(shí),也就證明了使用的頻率的頻繁性。那么有些事還是指的記錄一下,上周閑來(lái)無(wú)事跑一下吧,今天做一下記錄

各種場(chǎng)景代碼

其實(shí)我們也都知道slice的底層邏輯是一個(gè)動(dòng)態(tài)數(shù)組,創(chuàng)建的方式也略有不同,slice的創(chuàng)建也可以是最簡(jiǎn)單make,這就能滿足我們的使用,也可以直接指定他的cap容量,還有最好的做法是聲明它的容量的同時(shí),直接也分配好了它的內(nèi)存。各種場(chǎng)景的代碼如下,已iterator1000次為例測(cè)試:

/*
Package main
@Time   : 2022/11/25 17:47
@Author : ckx0709
@Remark :
*/
package main
// SliceUseSimple 簡(jiǎn)單的初始化
func SliceUseSimple() []int {
    is := make([]int, 0)
    for i := 0; i < 1000; i++ {
        is = append(is, i)
    }
    return is
}
// SliceUseInitCap 初始化容量
func SliceUseInitCap() []int {
    is := make([]int, 0, 1000)
    for i := 0; i < 1000; i++ {
        is = append(is, i)
    }
    return is
}
// SliceUseInitFull 初始化容量&分配好內(nèi)存
func SliceUseInitFull() []int {
    is := make([]int, 1000, 1000)
    for i := 0; i < 1000; i++ {
        is[i] = i
    }
    return is
}
// ArrayUse 數(shù)組
func ArrayUse() []int {
    var is [1000]int
    for i := 0; i < 1000; i++ {
        is[i] = i
    }
    return is[:]
}

使用benchmark測(cè)試

$ go test -benchmem -bench=Benchmark*
goos: windows
goarch: amd64
pkg: go_iteration/other/temp
cpu: Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz
BenchmarkSliceUseSimple-6         348466              3501 ns/op           25208 B/op         12 allocs/op
BenchmarkSliceUseInitCap-6       2190738               548.7 ns/op             0 B/op          0 allocs/op
BenchmarkSliceUseInitFull-6      4408171               261.4 ns/op             0 B/op          0 allocs/op
BenchmarkArrayUse-6              4483910               262.1 ns/op             0 B/op          0 allocs/op
PASS
ok      go_iteration/other/temp 6.067s

運(yùn)行了3次,數(shù)值偏差不大,就沒(méi)必要每次都貼出來(lái)了,這樣也就看出了當(dāng)我們使用最簡(jiǎn)單的聲明方式&聲明時(shí)就先分配好一切的性能相差了十幾倍,并且最簡(jiǎn)單聲明方式占用內(nèi)存&分配內(nèi)存的次數(shù)也很多,第二種,只證明好容量&全聲明相比,剛好性能存在一倍的差異,全聲明&數(shù)組的效率基本一致。

以上就是go slice不同初始化方式性能及數(shù)組比較詳解的詳細(xì)內(nèi)容,更多關(guān)于go slice初始化方式性能比較的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何在Go項(xiàng)目中輸出版本信息

    詳解如何在Go項(xiàng)目中輸出版本信息

    這篇文章主要介紹了詳解如何在Go項(xiàng)目中輸出版本信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Goland debug失效詳細(xì)解決步驟(合集)

    Goland debug失效詳細(xì)解決步驟(合集)

    今天用Goland開(kāi)發(fā)時(shí),打斷點(diǎn),以debug方式運(yùn)行,發(fā)現(xiàn)程序并沒(méi)有斷住,程序跳過(guò)了斷點(diǎn),直接運(yùn)行結(jié)束,網(wǎng)上搜尋了大量文章,最后得以解決,特此在這里總結(jié)幾種Goland debug失效常見(jiàn)情況,需要的朋友可以參考下
    2025-02-02
  • Go語(yǔ)言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解

    Go語(yǔ)言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換詳解

    Go在不同類型的變量之間賦值時(shí)需要顯示轉(zhuǎn)換,不能自動(dòng)轉(zhuǎn)換。這篇文章主要和大家介紹了Go語(yǔ)言中基本數(shù)據(jù)類型的相互轉(zhuǎn)換,感興趣的小伙伴可以了解一下
    2022-10-10
  • golang 對(duì)私有函數(shù)進(jìn)行單元測(cè)試的實(shí)例

    golang 對(duì)私有函數(shù)進(jìn)行單元測(cè)試的實(shí)例

    這篇文章主要介紹了golang 對(duì)私有函數(shù)進(jìn)行單元測(cè)試的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Go語(yǔ)言常見(jiàn)哈希函數(shù)的使用

    Go語(yǔ)言常見(jiàn)哈希函數(shù)的使用

    哈希表(Hash table,也叫散列表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪問(wèn)記錄,以加快查找的速度。具體的介紹網(wǎng)上有很詳細(xì)的描述,如閑聊哈希表 ,這里就不再累述了;
    2015-03-03
  • 解決Goland 同一個(gè)package中函數(shù)互相調(diào)用的問(wèn)題

    解決Goland 同一個(gè)package中函數(shù)互相調(diào)用的問(wèn)題

    這篇文章主要介紹了解決Goland 同一個(gè)package中函數(shù)互相調(diào)用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • golang包快速生成base64驗(yàn)證碼的方法

    golang包快速生成base64驗(yàn)證碼的方法

    這篇文章主要介紹了golang包快速生成base64驗(yàn)證碼的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • go語(yǔ)言中io操作中的 io.Reader 和 io.Writer的獲取方法

    go語(yǔ)言中io操作中的 io.Reader 和 io.Writer的獲取方法

    在Go語(yǔ)言中,要進(jìn)行文件io操作,通常需要使用io.Reader或io.Writer對(duì)象,獲取這些對(duì)象的方法包括使用標(biāo)準(zhǔn)庫(kù)中已實(shí)現(xiàn)Read或Write方法的對(duì)象,感興趣的可以了解一下
    2024-10-10
  • golang中protobuf的使用詳解

    golang中protobuf的使用詳解

    protobuf是Google公司提出的一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,常用于結(jié)構(gòu)化數(shù)據(jù)的序列化,具有語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展性特性,常用于通訊協(xié)議、服務(wù)端數(shù)據(jù)交換場(chǎng)景,下面我們就來(lái)看看golang中protobuf的具體使用吧
    2023-10-10
  • Go?channel結(jié)構(gòu)體源碼和讀寫(xiě)和關(guān)閉過(guò)程詳解

    Go?channel結(jié)構(gòu)體源碼和讀寫(xiě)和關(guān)閉過(guò)程詳解

    這篇文章主要介紹了Go?channel結(jié)構(gòu)體源碼和讀寫(xiě)和關(guān)閉過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

勐海县| 浦北县| 舞钢市| 永福县| 乌兰县| 镇远县| 岑溪市| 昭苏县| 锦州市| 宝兴县| 新野县| 文昌市| 济源市| 武定县| 龙陵县| 随州市| 博野县| 宜丰县| 莱州市| 盘山县| 嵊州市| 定西市| 乐至县| 上饶市| 铁岭县| 准格尔旗| 南阳市| 璧山县| 岳西县| 永登县| 清远市| 海晏县| 横山县| 温泉县| 钦州市| 会泽县| 桃江县| 息烽县| 鹤岗市| 满城县| 隆安县|