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

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

 更新時(shí)間:2017年12月27日 11:10:37   作者:pc859107393  
本篇文章主要介紹了golang常用手冊之切片(Slice)原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

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

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

定義或申明切片

首先我們看看申明切片:

var sliceName []type

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

sliceName = make([]type, len)

也可以適當(dāng)簡寫:

sliceName := make([]type, len)

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

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

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

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

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

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

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

初始化切片

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

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

 //當(dāng)然切片引用數(shù)組的標(biāo)準(zhǔn)寫法是: 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開始到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,代碼如下:

//首先我們需要先把原來的切片和欲添加元素作為參數(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
// 上面的說明中指出 我們目標(biāo)切片接受源數(shù)組,并且返回被拷貝的元素個(gè)數(shù)。

當(dāng)然,go語言并沒有提供內(nèi)置的remove函數(shù),但是我們可以通過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的使用

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

相關(guān)文章

  • GoLang bytes.Buffer基礎(chǔ)使用方法詳解

    GoLang bytes.Buffer基礎(chǔ)使用方法詳解

    Go標(biāo)準(zhǔn)庫中的bytes.Buffer(下文用Buffer表示)類似于一個(gè)FIFO的隊(duì)列,它是一個(gè)流式字節(jié)緩沖區(qū),我們可以持續(xù)向Buffer尾部寫入數(shù)據(jù),從Buffer頭部讀取數(shù)據(jù)。當(dāng)Buffer內(nèi)部空間不足以滿足寫入數(shù)據(jù)的大小時(shí),會(huì)自動(dòng)擴(kuò)容
    2023-03-03
  • Go語言Handler詳細(xì)說明

    Go語言Handler詳細(xì)說明

    這篇文章主要介紹了Go語言Handler詳細(xì)說明,Handler用于處理請求并給予響應(yīng)。更嚴(yán)格地說,用來讀取請求體、并將請求對(duì)應(yīng)的響應(yīng)字段(respones header)寫入ResponseWriter中,需要的朋友可以參考下
    2022-04-04
  • Golang多線程刷票的實(shí)現(xiàn)代碼

    Golang多線程刷票的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Golang多線程刷票的相關(guān)資料,這里實(shí)現(xiàn)刷票的功能,對(duì)于投票,刷票的很方便,并附實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-07-07
  • golang mapstructure庫的具體使用

    golang mapstructure庫的具體使用

    mapstructure用于將通用的map[string]interface{}解碼到對(duì)應(yīng)的 Go 結(jié)構(gòu)體中,或者執(zhí)行相反的操作,本文主要介紹了golang mapstructure庫的具體使用,感興趣的可以了解一下
    2023-09-09
  • Go語言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解

    Go語言基礎(chǔ)Json序列化反序列化及文件讀寫示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)Json序列化反序列化以及文件讀寫的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Go實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng)的實(shí)例代碼

    Go實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng)的實(shí)例代碼

    平常我們在開發(fā)API的時(shí)候,前端傳遞過來的大批數(shù)據(jù)需要經(jīng)過后端處理,如果后端處理的速度快,前端響應(yīng)就快,反之則很慢,影響用戶體驗(yàn),為了解決這一問題,需要我們自己實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng),本文將介紹如何用Go語言實(shí)現(xiàn)后臺(tái)任務(wù)調(diào)度系統(tǒng),需要的朋友可以參考下
    2023-06-06
  • 一文帶你搞懂Go如何讀寫Excel文件

    一文帶你搞懂Go如何讀寫Excel文件

    Excelize是一個(gè)用純Go語言編寫的庫,提供了一組函數(shù),可以對(duì)XLAM?/?XLSM?/?XLSX?/?XLTM?/?XLTX文件進(jìn)行讀寫。支持讀寫由Microsoft?Excel?2007及以后版本生成的電子表格文檔。本文就將用它實(shí)現(xiàn)讀寫Excel文件操作,感興趣的可以學(xué)習(xí)一下
    2022-11-11
  • golang struct擴(kuò)展函數(shù)參數(shù)命名警告解決方法

    golang struct擴(kuò)展函數(shù)參數(shù)命名警告解決方法

    今天在使用VSCode編寫golang代碼時(shí),定義一個(gè)struct,擴(kuò)展幾個(gè)方法,需要的朋友可以參考下
    2017-02-02
  • Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作

    Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作

    這篇文章主要介紹了Golang自定義結(jié)構(gòu)體轉(zhuǎn)map的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Go-JWT-RESTful身份認(rèn)證教程

    詳解Go-JWT-RESTful身份認(rèn)證教程

    這篇文章主要介紹了詳解Go-JWT-RESTful身份認(rèn)證教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論