欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GO語(yǔ)言中創(chuàng)建切片的三種實(shí)現(xiàn)方式

 更新時(shí)間:2023年09月20日 09:12:26   作者:奔跑吧,高同學(xué)  
這篇文章主要介紹了GO語(yǔ)言中創(chuàng)建切片的三種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

GO中三種方式創(chuàng)建切片

第一種方式

var 切片名 []數(shù)據(jù)類型

var s1[]string
fmt.Println(s1)
fmt.Println(len(s1))

第二種方式

切片名 := []類型{}

s2 := []int{}
fmt.Println(s2)
fmt.Println(len(s2))

第三種方式

使用make()函數(shù)創(chuàng)建:make(切片類型,長(zhǎng)度,容量)

s3 := make([]int, 3, 5)
fmt.Println(s3)
fmt.Println(len(s3))
fmt.Println(cap(s3))

使用make()函數(shù)創(chuàng)建注意事項(xiàng):

1.make(切片類型,長(zhǎng)度,容量)

2.長(zhǎng)度是已經(jīng)初始化的空間。容量是已經(jīng)開辟的空間,包括已經(jīng)初始化的空間和空閑的空間

3.切片長(zhǎng)度要小于容量

4.len()返回長(zhǎng)度,cap()返回容量

5.函數(shù)中的容量參數(shù)是可以省略的,這是容量與長(zhǎng)度相等

s4 := make([]int, 6)
fmt.Println(s4)
fmt.Println(len(s4))
fmt.Println(cap(s4))

go語(yǔ)言—切片的定義

  • 因?yàn)閿?shù)組長(zhǎng)度是固定的所以有很多局限性
  • 切片是一個(gè)擁有相同元素的可變長(zhǎng)序列,是基于數(shù)組類型做的一層封裝
  • 切片非常靈活,支持自動(dòng)擴(kuò)容
  • 切片是引用類型,內(nèi)部結(jié)構(gòu)包含地址、長(zhǎng)度、容量。所以不需要使用額外的內(nèi)存

1、切片的定義

var a []string // 定義一個(gè)空切片,[]中不帶任何內(nèi)容就是切片
var b = []int{} //聲明一個(gè)整數(shù)切片并初始化
var c = []bool{"false","true"} //聲明一個(gè)布爾切片并初始化
// 切片是引用類型,不支持直接比較,只能和nil比較
fmt.Println(a == nil) //true
fmt.Println(b == nil) //false
fmt.Println(c == nil) //false

2、切片表達(dá)式

切片底層就是一個(gè)數(shù)組,所以可以基于數(shù)組通過(guò)索引得到切片

a := [5]int{1,2,3,4,5}
b := a[1:3]
// b := a[:]  等同于a數(shù)組所有值
fmt.Printf("類型:%T\n值:%s",b,b)
輸出:
類型:[]int //int類型切片
值:[2 3]

3、切片的取值和改值

  • 切片也通過(guò)索引取值和改值
  • 切片修改值時(shí),底層數(shù)組的值也會(huì)改變,與切片保持一致
  • 同理,底層數(shù)組變化也會(huì)影響到切片變化
a := [6]int{1,2,3,4,5,6}
b := a[:] //b為數(shù)組a的切片
b[2] = 30 //修改切片b索引為3的值
fmt.Printf("a的類型:%T\na的值:%v",a,a)
fmt.Printf("b的類型:%T\nb的值:%v",b,b)
輸出:
a的類型:[6]int
a的值:[1 2 30 4 5 6] //修改切片b,a中值同樣被修改
b的類型:[]int
b的值:[1 2 30 4 5 6]

4、切片的長(zhǎng)度和容量

切片有自己的長(zhǎng)度和容量,可以通過(guò)len()函數(shù)求長(zhǎng)度,cap()函數(shù)求切片容量

a := [5]int{1,2,3,4,5}
// 切片長(zhǎng)度:指切片當(dāng)前有多長(zhǎng),即存了多少值
var s []int = a[0:2]
fmt.Println(s) // [1,2,3]
fmt.Println(len(s)) // 3
// 切片容量:指這個(gè)切片最多能存多少值,基于底層數(shù)組來(lái)的
// 但是切片容量并不一定等于數(shù)組長(zhǎng)度,容量大小取決于切片是從哪個(gè)地方開始切數(shù)組的,從切數(shù)組位置開始往后計(jì)算
var s1 []int = a[0:3] //從索引為0的位置向后切
fmt.Println(cap(s1)) // 容量為5
var s2 []int = a[2:] //從索引為2的位置向后切
fmt.Println(cap(s2)) //容量為3

5、使用make()函數(shù)創(chuàng)建切片

make()函數(shù)可以不基于數(shù)組而動(dòng)態(tài)的創(chuàng)建切片

make([]T, size, cap)
  • T:切片的元素類型
  • size:切片中元素的數(shù)量
  • cap:切片的容量,cap可以省略,省略時(shí)默認(rèn)等于size
a := make([]int,3,10) // 創(chuàng)建一個(gè)長(zhǎng)度為3,容量為10的整數(shù)型切片,默認(rèn)0值
fmt.Println(a) // [0,0,0]
fmt.Println(len(a)) // 3   a的內(nèi)部存儲(chǔ)空間分配了10個(gè),但實(shí)際只用了3個(gè)
fmt.Println(cap(a)) // 10

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms)

    golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms)

    這篇文章主要介紹了golang使用map支持高并發(fā)的方法(1000萬(wàn)次操作14ms),本文給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • go-micro微服務(wù)domain層開發(fā)示例詳解

    go-micro微服務(wù)domain層開發(fā)示例詳解

    這篇文章主要為大家介紹了go-micro微服務(wù)domain層開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 細(xì)說(shuō)Go語(yǔ)言中空結(jié)構(gòu)體的奇妙用途

    細(xì)說(shuō)Go語(yǔ)言中空結(jié)構(gòu)體的奇妙用途

    Go語(yǔ)言中,我們可以定義空結(jié)構(gòu)體,即沒(méi)有任何成員變量的結(jié)構(gòu)體,使用關(guān)鍵字?struct{}?來(lái)表示。這種結(jié)構(gòu)體似乎沒(méi)有任何用處,但實(shí)際上它在?Go?語(yǔ)言中的應(yīng)用非常廣泛,本文就來(lái)詳解講講
    2023-05-05
  • Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào)

    Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào)

    這篇文章主要介紹了Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號(hào),文章圍主題詳細(xì)內(nèi)容展開相關(guān)介紹,感興趣的小伙伴可以參考一下
    2022-05-05
  • 在Golang中執(zhí)行Shell命令的教程詳解

    在Golang中執(zhí)行Shell命令的教程詳解

    在本教程中,我們將學(xué)習(xí)如何在 Golang 中執(zhí)行shell命令(如 ls、mkdir 或 grep ),我們還將學(xué)習(xí)如何通過(guò) stdin 和 stdout 傳遞 I/O 到正在運(yùn)行的命令,以及管理長(zhǎng)時(shí)間運(yùn)行的命令,感興趣的同學(xué)可以借鑒一下
    2023-05-05
  • Hugo?Config模塊構(gòu)建實(shí)現(xiàn)源碼剖析

    Hugo?Config模塊構(gòu)建實(shí)現(xiàn)源碼剖析

    這篇文章主要為大家介紹了Hugo?Config模塊構(gòu)建實(shí)現(xiàn)源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • GoLang string與strings.Builder使用對(duì)比詳解

    GoLang string與strings.Builder使用對(duì)比詳解

    這篇文章主要介紹了GoLang string與strings.Builder使用對(duì)比,Builder 用于使用 Write 方法有效地構(gòu)建字符串。它最大限度地減少了內(nèi)存復(fù)制。零值可以使用了。不要復(fù)制非零生成器
    2023-03-03
  • Golang中指針的使用詳解

    Golang中指針的使用詳解

    Golang是一門支持指針的編程語(yǔ)言,指針是一種特殊的變量,存儲(chǔ)了其他變量的地址。通過(guò)指針,可以在程序中直接訪問(wèn)和修改變量的值,避免了不必要的內(nèi)存拷貝和傳遞。Golang中的指針具有高效、安全的特點(diǎn),在并發(fā)編程和底層系統(tǒng)開發(fā)中得到廣泛應(yīng)用
    2023-04-04
  • Golang實(shí)現(xiàn)微信公眾號(hào)后臺(tái)接入的示例代碼

    Golang實(shí)現(xiàn)微信公眾號(hào)后臺(tái)接入的示例代碼

    這篇文章主要介紹了Golang實(shí)現(xiàn)微信公眾號(hào)后臺(tái)接入的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • golang如何去除字符串的換行符

    golang如何去除字符串的換行符

    這篇文章主要介紹了golang如何去除字符串的換行符問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評(píng)論