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

Golang中slice切片的實(shí)現(xiàn)示例

 更新時(shí)間:2024年09月11日 11:27:18   作者:五敷有你  
Go語(yǔ)言中,切片是對(duì)數(shù)組的抽象,提供了更靈活的動(dòng)態(tài)數(shù)組解決方案,本文就來(lái)介紹一下Golang中slice切片的實(shí)現(xiàn)示例,感興趣的可以了解一下

slice

Go語(yǔ)言的切片是對(duì)數(shù)組的抽象。

數(shù)組的使用

package main

import (
	"fmt"
)

// 傳遞固定長(zhǎng)度的數(shù)組還是值傳遞的方式
func printArray(myArray [5]int) {
	for index, value := range myArray {
		fmt.Println("index:", index, "value:", value)
	}

}


func main() {
	var myArr [5]int

	myArr2 := [10]int{1, 2, 3, 4}
	myArr3 := [4]int{1, 2, 3, 4}
	myArr4 := []int{1, 2, 3, 4}

	for i := 0; i < len(myArr); i++ {
		fmt.Println(myArr[i])
	}
	for index, value := range myArr2 {
		fmt.Println("index:", index, "value:", value)
	}

	fmt.Printf("myArr1 type=%T\n", myArr)
	fmt.Printf("myArr2 type=%T\n", myArr2)
	fmt.Printf("myArr3 type=%T\n", myArr3)
	
}

注意

數(shù)組傳遞的參數(shù)是以值拷貝的形式進(jìn)行傳遞,如下:(在函數(shù)中修改了,但在主函數(shù)中并沒(méi)有變化)

package main

import (
	"fmt"
)

// 傳遞固定長(zhǎng)度的數(shù)組還是值傳遞的方式
func printArray(myArray [5]int) {
	for index, value := range myArray {
		fmt.Println("index:", index, "value:", value)
	}
	myArray[0] = 15

}

func main() {

	myArr2 := [5]int{1, 2, 3, 4}
	printArray(myArr2)
	fmt.Println("==================")
	for index, value := range myArr2 {
		fmt.Println("index:", index, "value:", value)
	}

}

Go數(shù)組的長(zhǎng)度不可改變,在特定的場(chǎng)景中這樣的集合就不太適合了,Go中就提供了內(nèi)置類型切片(動(dòng)態(tài)數(shù)組),與數(shù)組相比,切片的長(zhǎng)度是不固定的,可以追加時(shí)可能使得切片的容量增大。

定義切片

可以聲明一個(gè)未指定大小的數(shù)組來(lái)定義切片(切片不需要說(shuō)明長(zhǎng)度。)

var identifier []type

使用make()函數(shù)來(lái)創(chuàng)建切片:

var slice1 []type = make([]type, len)


也可以簡(jiǎn)寫為


slice1 := make([]type, len)

//也可以指定容量,其中capacity為可選參數(shù)。

make([]T, length, capacity)

切片的四種初始化的方式

package main

import "fmt"

func main() {
	//聲明slice是一個(gè)切片,并且初始化,默認(rèn)值是1,2,3長(zhǎng)度是len=3
	slice1 := []int{1, 2, 3}
	//聲明slice是一個(gè)切片,但是并沒(méi)有為slice分配空間
	var slice2 []int
	slice2 = make([]int, 10, 15)
	slice2[0] = 100

	//聲明slice是一個(gè)切片,同時(shí)給slice分配3個(gè)空間,初始化值是0
	var slice3 []int = make([]int, 10)

	//聲明slice是一個(gè)切片,同時(shí)為slice分配空間,10個(gè)空間,初始化值是0,通過(guò):=推導(dǎo)出slice是一個(gè)切片
	slice4 := make([]int, 10)

	fmt.Printf("len=%d,slice=%v\n", len(slice1), slice1)
	fmt.Printf("len=%d,slice=%v,cap=%d\n", len(slice2), slice2, cap(slice2))
	fmt.Printf("len=%d,slice=%v\n", len(slice3), slice3)
	fmt.Printf("len=%d,slice=%v\n", len(slice4), slice4)


}

切片的追加,截取與拷貝

切片示意圖:

追加

如果想增加切片的容量,我們必須創(chuàng)建一個(gè)新的更大的切片并把原分片的內(nèi)容都拷貝過(guò)來(lái)

長(zhǎng)度增加后,超過(guò)容量,則容量增加2倍

package main

import "fmt"

func main() {
	var numbers = make([]int, 3, 5)
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(numbers), cap(numbers), numbers)
	numbers = append(numbers, 1)
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(numbers), cap(numbers), numbers)
	numbers = append(numbers, 1)
	numbers = append(numbers, 1)
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(numbers), cap(numbers), numbers)

}

截取

	s := []int{1, 2, 3}
	//左閉右開
	s1 := s[0:2]
	s1[0] = 100
	s[1] = 200
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s), cap(s), s)
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s1), cap(s1), s1)

拷貝

截取是采用的淺拷貝,是指向的同一個(gè)地址。

如果要深拷貝??梢允褂胏opy函數(shù)

	s := []int{1, 2, 3}
	var s1 = make([]int, 3)
	copy(s1, s)
	s1[0] = 100
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s), cap(s), s)
	fmt.Printf("len=%d,cap=%d,slice=%v\n", len(s1), cap(s1), s1)

到此這篇關(guān)于Golang中slice切片的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Golang slice切片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang協(xié)程關(guān)閉踩坑實(shí)戰(zhàn)記錄

    golang協(xié)程關(guān)閉踩坑實(shí)戰(zhàn)記錄

    協(xié)程(coroutine)是Go語(yǔ)言中的輕量級(jí)線程實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于golang協(xié)程關(guān)閉踩坑的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Go命令行參數(shù)解析flag 包使用示例詳解

    Go命令行參數(shù)解析flag 包使用示例詳解

    這篇文章主要介紹了Go命令行參數(shù)解析flag 包使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • 詳解Go語(yǔ)言中單鏈表的使用

    詳解Go語(yǔ)言中單鏈表的使用

    鏈表由一系列結(jié)點(diǎn)(鏈表中每一個(gè)元素稱為結(jié)點(diǎn))組成,結(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。本文將通過(guò)實(shí)例為大家詳解Go語(yǔ)言中單鏈表的常見用法,感興趣的可以了解一下
    2022-08-08
  • Go語(yǔ)言中的原子操作使用詳解

    Go語(yǔ)言中的原子操作使用詳解

    這篇文章主要介紹了Go語(yǔ)言中的原子操作使用詳解的相關(guān)資料,需要的朋友可以參考下
    2023-08-08
  • Go語(yǔ)言小白入門刷題打印輸出沙漏

    Go語(yǔ)言小白入門刷題打印輸出沙漏

    這篇文章主要介紹了Go語(yǔ)言刷題打印輸出沙漏的示例過(guò)程詳解,非常適合剛?cè)腴TGo語(yǔ)言的小白學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 深入理解Golang之http server的實(shí)現(xiàn)

    深入理解Golang之http server的實(shí)現(xiàn)

    這篇文章主要介紹了深入理解Golang之http server的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Go語(yǔ)言單元測(cè)試基礎(chǔ)從入門到放棄

    Go語(yǔ)言單元測(cè)試基礎(chǔ)從入門到放棄

    這篇文章主要介紹了Go單元測(cè)試基礎(chǔ)從入門到放棄為大家開啟Go語(yǔ)言單元測(cè)試第一篇章,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語(yǔ)言指針使用分析與講解

    Go語(yǔ)言指針使用分析與講解

    這篇文章主要介紹了Go語(yǔ)言指針使用分析與講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 源碼分析Go語(yǔ)言使用cgo導(dǎo)致線程增長(zhǎng)的原因

    源碼分析Go語(yǔ)言使用cgo導(dǎo)致線程增長(zhǎng)的原因

    這篇文章主要從一個(gè)cgo調(diào)用開始解析Go語(yǔ)言源碼,從而分析一下造成線程增長(zhǎng)的原因,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一學(xué)習(xí)一下
    2023-06-06
  • Golang 在gin框架中如何使用JWT鑒權(quán)

    Golang 在gin框架中如何使用JWT鑒權(quán)

    JWT,全稱 JSON Web Token,是一種開放標(biāo)準(zhǔn)(RFC 7519),用于安全地在雙方之間傳遞信息,這篇文章主要介紹了golang 在Gin框架中使用JWT鑒權(quán),需要的朋友可以參考下
    2024-07-07

最新評(píng)論

汾阳市| 河津市| 裕民县| 河曲县| 东乡族自治县| 镶黄旗| 玛沁县| 兴海县| 蓝田县| 郎溪县| 独山县| 旅游| 吕梁市| 专栏| 嘉义县| 定日县| 阿尔山市| 兴安盟| 萨嘎县| 剑阁县| 望都县| 温泉县| 遵义县| 沂水县| 黔东| 班玛县| 闸北区| 申扎县| 江川县| 太谷县| 屯昌县| 房产| 泰来县| 大姚县| 怀宁县| 石阡县| 乌苏市| 宝应县| 赣州市| 东丽区| 兰西县|