国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

go語言中的切片

這篇具有很好參考價(jià)值的文章主要介紹了go語言中的切片。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

切片底層

切片(Slice)是一個(gè)擁有相同類型元素的可變長度的序列。它是基于數(shù)組類型做的一層封裝。它非常靈活,支持自動(dòng)擴(kuò)容。

切片是一個(gè)引用類型,它的內(nèi)部結(jié)構(gòu)包含地址、長度容量。切片一般用于快速地操作一塊數(shù)據(jù)集合。

切片的本質(zhì)

切片的本質(zhì)就是對(duì)底層數(shù)組的封裝,它包含了三個(gè)信息:底層數(shù)組的指針、切片的長度(len)和切片的容量(cap)。

舉個(gè)例子,現(xiàn)在有一個(gè)數(shù)組a := [8]int{0, 1, 2, 3, 4, 5, 6, 7},切片s1 := a[:5],相應(yīng)示意圖如下。

go語言中的切片,golang,開發(fā)語言,后端

切片s2 := a[3:6],相應(yīng)示意圖如下:go語言中的切片,golang,開發(fā)語言,后端

切片不能直接比較

切片之間是不能比較的,我們不能使用==操作符來判斷兩個(gè)切片是否含有全部相等元素。 切片唯一合法的比較操作是和nil比較。 一個(gè)nil值的切片并沒有底層數(shù)組,一個(gè)nil值的切片的長度和容量都是0。但是我們不能說一個(gè)長度和容量都是0的切片一定是nil,例如下面的示例:

var s1 []int         //len(s1)=0;cap(s1)=0;s1==nil
s2 := []int{}        //len(s2)=0;cap(s2)=0;s2!=nil
s3 := make([]int, 0) //len(s3)=0;cap(s3)=0;s3!=nil

所以要判斷一個(gè)切片是否是空的,要是用len(s) == 0來判斷,不應(yīng)該使用s == nil來判斷。

切片的擴(kuò)容策略

  • 首先判斷,如果新申請(qǐng)容量(cap)大于2倍的舊容量(old.cap),最終容量(newcap)就是新申請(qǐng)的容量(cap)。
  • 否則判斷,如果舊切片的長度小于1024,則最終容量(newcap)就是舊容量(old.cap)的兩倍,即(newcap=doublecap),
  • 否則判斷,如果舊切片長度大于等于1024,則最終容量(newcap)從舊容量(old.cap)開始循環(huán)增加原來的1/4,即(newcap=old.cap,for {newcap += newcap/4})直到最終容量(newcap)大于等于新申請(qǐng)的容量(cap),即(newcap >= cap)
  • 如果最終容量(cap)計(jì)算值溢出,則最終容量(cap)就是新申請(qǐng)容量(cap)。

需要注意的是,切片擴(kuò)容還會(huì)根據(jù)切片中元素的類型不同而做不同的處理,比如intstring類型的處理方式就不一樣。

使用copy()函數(shù)復(fù)制切片

由于切片是引用類型,所以a和b其實(shí)都指向了同一塊內(nèi)存地址。修改b的同時(shí)a的值也會(huì)發(fā)生變化。

Go語言內(nèi)建的copy()函數(shù)可以迅速地將一個(gè)切片的數(shù)據(jù)復(fù)制到另外一個(gè)切片空間中,copy()函數(shù)的使用格式如下:

copy(destSlice, srcSlice []T)

其中:

  • srcSlice: 數(shù)據(jù)來源切片
  • destSlice: 目標(biāo)切片

從切片中刪除元素

Go語言中并沒有刪除切片元素的專用方法,我們可以使用切片本身的特性來刪除元素。 代碼如下:

func main() {
	// 從切片中刪除元素
	a := []int{30, 31, 32, 33, 34, 35, 36, 37}
	// 要?jiǎng)h除索引為2的元素
	a = append(a[:2], a[3:]...)
	fmt.Println(a) //[30 31 33 34 35 36 37]
}

總結(jié)一下就是:要從切片a中刪除索引為index的元素,操作方法是a = append(a[:index], a[index+1:]...)

package main

import "fmt"

func main() {
	var a = make([]string, 5, 10)
	for i := 0; i < 10; i++ {
		a = append(a, fmt.Sprintf("%v", i))
	}
	fmt.Println(a)
}

go語言中的切片,golang,開發(fā)語言,后端文章來源地址http://www.zghlxwxcb.cn/news/detail-674068.html

到了這里,關(guān)于go語言中的切片的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Golang】go編程語言適合哪些項(xiàng)目開發(fā)?

    【Golang】go編程語言適合哪些項(xiàng)目開發(fā)?

    前言 在當(dāng)今數(shù)字化時(shí)代,軟件開發(fā)已成為各行各業(yè)的核心需求之一。 而選擇適合的編程語言對(duì)于項(xiàng)目的成功開發(fā)至關(guān)重要。 本文將重點(diǎn)探討Go編程語言適合哪些項(xiàng)目開發(fā),以幫助讀者在選擇合適的編程語言時(shí)做出明智的決策。 Go 編程語言適合哪些項(xiàng)目開發(fā)? Go是由Google開發(fā)

    2024年02月04日
    瀏覽(29)
  • 《Go語言在微服務(wù)中的崛起:為什么Go是下一個(gè)后端之星?》

    《Go語言在微服務(wù)中的崛起:為什么Go是下一個(gè)后端之星?》

    ???? 博主貓頭虎???? 帶您進(jìn)入 Golang 語言的新世界???? ?? 博客首頁 ——????貓頭虎的博客?? ?? 《面試題大全專欄》 ?? 文章圖文并茂??生動(dòng)形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》 ?? 學(xué)會(huì)IDEA常用操作,工作效率翻倍~?? ?? 《100天精通

    2024年02月09日
    瀏覽(35)
  • 100天精通Golang(基礎(chǔ)入門篇)——第5天: Go語言中的數(shù)據(jù)類型學(xué)習(xí)

    100天精通Golang(基礎(chǔ)入門篇)——第5天: Go語言中的數(shù)據(jù)類型學(xué)習(xí)

    ?? 博主 libin9iOak帶您 Go to Golang Language.? ?? 個(gè)人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動(dòng)形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學(xué)會(huì)IDEA常用操作,工作效率翻倍~?? ?? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬請(qǐng)批

    2024年02月08日
    瀏覽(35)
  • 【Golang】VsCode下開發(fā)Go語言的環(huán)境配置(超詳細(xì)圖文詳解)

    【Golang】VsCode下開發(fā)Go語言的環(huán)境配置(超詳細(xì)圖文詳解)

    ??推薦網(wǎng)站(不斷完善中):個(gè)人博客 ??個(gè)人主頁:個(gè)人主頁 ??相關(guān)專欄:CSDN專欄、個(gè)人專欄 ??立志賺錢,干活想躺,瞎分享的摸魚工程師一枚 ? 話說在前,Go語言的編碼方式是 UTF-8 ,理論上你直接使用文本進(jìn)行編輯也是可以的,當(dāng)然為了提升我們的開發(fā)效率我們還是需

    2024年02月07日
    瀏覽(27)
  • 【Go】Go 語言教程--GO語言切片(Slice)(十四)

    往期回顧: Go 語言教程–介紹(一) Go 語言教程–語言結(jié)構(gòu)(二) Go 語言教程–語言結(jié)構(gòu)(三) Go 語言教程–數(shù)據(jù)類型(四) Go 語言教程–語言變量(五) Go 語言教程–GO語言常量(六) Go 語言教程–GO語言運(yùn)算符(七) Go 語言教程–GO條件和循環(huán)語句(八) Go 語言教程

    2024年02月16日
    瀏覽(18)
  • go中的切片

    案例1: 從輸出結(jié)果可以看出:append 后的 s 被重新分配了底層數(shù)組(也就是說 s 的底層數(shù)組不再是 data,那么修改 s 的值不會(huì)再影響 data,它們不再有關(guān)聯(lián)),并把原數(shù)組中的值拷貝到新數(shù)組中。這是因?yàn)槌隽嗽衅娜萘?。在上例中,如果只追加一個(gè)值,則不會(huì)超過 s.ca

    2024年02月10日
    瀏覽(24)
  • 【Golang星辰圖】數(shù)據(jù)管理利器:Go編程語言中的數(shù)據(jù)庫和搜索引擎綜合指南

    Go編程語言是一種強(qiáng)大、類型安全且高效的編程語言,它在處理數(shù)據(jù)庫和搜索引擎方面有著廣泛的應(yīng)用。本篇文章將詳細(xì)介紹幾個(gè)Go編程語言中常用的數(shù)據(jù)庫和全文搜索引擎,包括Go-bleve、Go-pgx、Go-leveldb/leveldb、Go-xorm、Go-mysql-driver和Go-bbolt/bbolt。對(duì)于每個(gè)工具,我們將介紹其功

    2024年03月26日
    瀏覽(109)
  • 100天精通Golang(基礎(chǔ)入門篇)——第12天:深入解析Go語言中的集合(Map)及常用函數(shù)應(yīng)用

    100天精通Golang(基礎(chǔ)入門篇)——第12天:深入解析Go語言中的集合(Map)及常用函數(shù)應(yīng)用

    ?? 博主 libin9iOak帶您 Go to Golang Language.? ?? 個(gè)人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動(dòng)形象??簡單易學(xué)!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學(xué)會(huì)IDEA常用操作,工作效率翻倍~?? ?? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬請(qǐng)批

    2024年02月12日
    瀏覽(27)
  • Go語言基礎(chǔ)之切片

    Go語言基礎(chǔ)之切片

    切片(Slice)是一個(gè)擁有相同類型元素的可變長度的序列。它是基于數(shù)組類型做的一層封裝。它非常靈活,支持自動(dòng)擴(kuò)容。 切片是一個(gè)引用類型,它的內(nèi)部結(jié)構(gòu)包含地址、長度和容量。切片一般用于快速地操作一塊數(shù)據(jù)集合 聲明切片類型的基本語法如下: 其中, name:表示變

    2024年02月11日
    瀏覽(27)
  • Go 語言切片是如何擴(kuò)容的?

    原文鏈接: Go 語言切片是如何擴(kuò)容的? 在 Go 語言中,有一個(gè)很常用的數(shù)據(jù)結(jié)構(gòu),那就是切片(Slice)。 切片是一個(gè)擁有相同類型元素的可變長度的序列,它是基于數(shù)組類型做的一層封裝。它非常靈活,支持自動(dòng)擴(kuò)容。 切片是一種引用類型,它有三個(gè)屬性: 指針 , 長度 和

    2023年04月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包