濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > golang常用手冊(cè)之切片(Slice)原理

golang常用手冊(cè)之切片(Slice)原理

熱門(mén)標(biāo)簽:阿里云ai電話(huà)機(jī)器人 浙江高頻外呼系統(tǒng)多少錢(qián)一個(gè)月 濱州自動(dòng)電銷(xiāo)機(jī)器人排名 汕頭小型外呼系統(tǒng) 惠州電銷(xiāo)防封電話(huà)卡 黃岡人工智能電銷(xiāo)機(jī)器人哪個(gè)好 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 建造者2地圖標(biāo)注 釘釘有地圖標(biāo)注功能嗎

切片,這是一個(gè)在go語(yǔ)言中引入的新的理念。它有一些特征如下:

  1. 對(duì)數(shù)組抽象
  2. 數(shù)組長(zhǎng)度不固定
  3. 可追加元素
  4. 切片容量可增大
  5. 容量大小成片增加

我們先把上面的理念整理在這里,但是實(shí)際的還是要擼碼來(lái)解決問(wèn)題。

定義或申明切片

首先我們看看申明切片:

var sliceName []type

定義完成后,我們需要定義切片:

sliceName = make([]type, len)

也可以適當(dāng)簡(jiǎn)寫(xiě):

sliceName := make([]type, len)

在上面的例子中,我們申明了一個(gè)切片,我們現(xiàn)在先運(yùn)行看看結(jié)果。

package main
import "fmt"
func main() {
 sliceName := make([]string, 3)
 fmt.Printf("切片slice_name的長(zhǎng)度:len=%d \n", len(sliceName))
}

 //運(yùn)行結(jié)果如下:
 /*
 * 切片slice_name的長(zhǎng)度:len=3 
 */

那么看到這里小伙伴們是不是發(fā)現(xiàn)切片,也就是我們普通的一個(gè)數(shù)組,那么它憑什么叫做切片呢?

我么可以看到另外一個(gè)make函數(shù): make([]T, length, capacity)

在上面的capacity是數(shù)組的容量,length則是數(shù)組的長(zhǎng)度。當(dāng)新插入元素后長(zhǎng)度超過(guò)容量,則會(huì)自動(dòng)增加一個(gè)容量來(lái)填裝數(shù)據(jù),但是 切片的空間大小是 capacity的整數(shù)倍 。demo如下:

package main
import "fmt"
func main() {
 sliceName := make([]string, 3, 15)
 fmt.Printf("切片slice_name的長(zhǎng)度:len=%d cap=%d \n", len(sliceName), cap(sliceName))
 sliceName[0] = "程先生"
 fmt.Println(sliceName)
 //運(yùn)行結(jié)果如下:
 /*
 * 切片slice_name的長(zhǎng)度:len=3 cap=15 
 * [程先生 ]
 */
 
}

初始化切片

任何變量或常量在使用之前都需要初始化,不過(guò)常量是直接把申明和初始化寫(xiě)在一起的。我們來(lái)看看切片的初始化:

//初始化數(shù)組
 arr := [] int{1, 2, 3}
 fmt.Println(arr)
 //初始化切片 sliceName 是 數(shù)組arr 的引用
 sliceName := arr[:]
 fmt.Println(sliceName)

 //當(dāng)然切片引用數(shù)組的標(biāo)準(zhǔn)寫(xiě)法是: s := arr[startIndex:endIndex]
 //其中startIndex和endIndex都可以省略。
 //省缺startIndex則是數(shù)組下標(biāo)為0,endIndex省略則是下標(biāo)為 len-1

 //運(yùn)行結(jié)果如下:
 //[1 2 3]
 //[1 2 3]
  
 sliceName1 := arr[1:3]
 fmt.Println(sliceName1)
 //截取切片元素下標(biāo)從 1開(kāi)始到3但是并不包括3 并復(fù)制給切片sliceName1
 //運(yùn)行結(jié)果:[2 3]

當(dāng)然切片也會(huì)存在空對(duì)象nil的情況,在你申明后不初始化的情況下則會(huì)產(chǎn)生nil。

切片的增刪改查

當(dāng)我們創(chuàng)建了一個(gè)切片后,我們需要對(duì)切片的元素進(jìn)行增加該怎么辦呢? 我們可以看到內(nèi)置append函數(shù): func append(slice []Type, elems ...Type) []Type,代碼如下:

//首先我們需要先把原來(lái)的切片和欲添加元素作為參數(shù)加入到append函數(shù)中,
  //并且append會(huì)返回一個(gè)新的切片,所以代碼如下:
 sliceName = append(sliceName, 4)
 fmt.Println(sliceName)
 //運(yùn)行結(jié)果如下:
 // [1 2 3 4]

當(dāng)然我們順帶看下 copy函數(shù)如下:

// The copy built-in function copies elements from a source slice into a destination slice.
// Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).

func copy(dst, src []Type) int
// 上面的說(shuō)明中指出 我們目標(biāo)切片接受源數(shù)組,并且返回被拷貝的元素個(gè)數(shù)。

當(dāng)然,go語(yǔ)言并沒(méi)有提供內(nèi)置的remove函數(shù),但是我們可以通過(guò)append函數(shù)實(shí)現(xiàn),如下:

//移除某個(gè)position的元素
//主要思路就是把該位置之前的數(shù)據(jù)和后面的數(shù)據(jù)組合到一起并賦值給原先的數(shù)組
sliceName = append(sliceName[:position],sliceName[position+1:]...)

總結(jié)

  1. 切片其實(shí)就是數(shù)組
  2. 切片的數(shù)組大小是能夠變化的
  3. 切片的容量增加是整數(shù)倍的
  4. 任何對(duì)象都有可能為空nil
  5. 內(nèi)置函數(shù)append和copy的使用

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang-切片slice的創(chuàng)建方式
  • Golang::slice和nil的對(duì)比分析
  • golang語(yǔ)言如何將interface轉(zhuǎn)為int, string,slice,struct等類(lèi)型
  • Golang中的Slice與數(shù)組及區(qū)別詳解
  • golang中range在slice和map遍歷中的注意事項(xiàng)
  • Golang slice切片操作之切片的追加、刪除、插入等
  • golang中的空slice案例

標(biāo)簽:昭通 晉中 滄州 泰安 阿壩 駐馬店 東營(yíng) 瀘州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang常用手冊(cè)之切片(Slice)原理》,本文關(guān)鍵詞  golang,常用,手冊(cè),之,切片,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang常用手冊(cè)之切片(Slice)原理》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang常用手冊(cè)之切片(Slice)原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    莫力| 长春市| 堆龙德庆县| 湄潭县| 融水| 蓝田县| 醴陵市| 神木县| 大新县| 和龙市| 宣武区| 平谷区| 兴文县| 饶平县| 辽阳市| 黄冈市| 佛坪县| 马鞍山市| 合川市| 阿合奇县| 黔东| 固阳县| 秀山| 花莲县| 南丰县| 霍林郭勒市| 高淳县| 闻喜县| 冕宁县| 蒲城县| 莱西市| 玛多县| 南充市| 韶山市| 荃湾区| 高要市| 景宁| 襄樊市| 天等县| 大渡口区| 芦山县|