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

輕松讀懂Golang中的數(shù)組和切片

 更新時(shí)間:2022年03月14日 15:38:14   作者:頭禿貓輕王  
這篇文章主要給大家介紹了關(guān)于Golang中數(shù)組和切片的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者Golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、數(shù)組和切片的區(qū)別是什么?

1.數(shù)組

數(shù)組是內(nèi)置(build-in)類型,是一組同類型數(shù)據(jù)的集合,它是值類型,通過從0開始的下標(biāo)索引訪問元素值。在初始化后長度是固定的,無法修改其長度。當(dāng)作為方法的參數(shù)傳入時(shí)將復(fù)制一份數(shù)組而不是引用同一指針。數(shù)組的長度也是其類型的一部分,通過內(nèi)置函數(shù)len(array)獲取其長度。

2.切片

Slices切片(“動(dòng)態(tài)數(shù)組")也是內(nèi)置類型,但與數(shù)組相比切片的長度是不固定的,可以追加元素,在追加時(shí)可能使切片的容量增大。切片是引用類型,因此在當(dāng)傳遞切片時(shí)將引用同一指針,修改值將會影響其他的對象。

切片中有兩個(gè)概念:

  • len長度,長度是指已經(jīng)被賦過值的最大下標(biāo)+1,可通過內(nèi)置函數(shù)len()獲得。
  • cap容量,容量是指切片目前可容納的最多元素個(gè)數(shù),可通過內(nèi)置函數(shù)cap()獲得。

二、數(shù)組和切片的初始化?

1.數(shù)組

package main

import "fmt"

func main() {

	//初始化數(shù)組的初始化有多種形式,查看示例代碼
	a0 := [5]int{1, 2, 3, 4, 5}
	//長度為5的數(shù)組,其元素值依次為:1,2,3,4,5
	// [1 2 3 4 5] 
	a1 := [5]int{1, 2}
	//長度為5的數(shù)組,其元素值依次為:1,2,0,0,0 。
	//未指定初值的元素將會賦初值
	//int的默認(rèn)值0,string的默認(rèn)值是""
	//[1 2 0 0 0]
	a2 := [...]int{1, 2, 3, 4, 5}
	//長度為5的數(shù)組,其長度是根據(jù)初始化時(shí)指定的元素個(gè)數(shù)決定的
	// [...] 長度不固定,根據(jù)元素個(gè)數(shù)改變
	// [1 2 3 4 5] 
	a3 := [5]int{2: 1, 3: 2, 4: 3}
	//長度為5的數(shù)組,key:value,
	//key:value 2 : 1 即 a3[2] = 1 
	// 3 : 2 即 a3[3] = 2
	// [0 0 1 2 3]
	a4 := [...]int{2: 1, 4: 3}
	//長度為5的數(shù)組,起元素值依次為:0,0,1,0,3。由于指定了最大索引4對應(yīng)的值3,根據(jù)初始化的元素個(gè)數(shù)確定其長度為5賦值與使用
	// [...] 長度不固定,根據(jù)元素個(gè)數(shù)改變
	// key:value 4 : 3 即 a4[4] = 3
	// 所以需要有 5 個(gè)元素,即長度 [5]int
	// [0 0 1 0 3]
	fmt.Println(a0, a1, a2, a3, a4)

}

2.切片

package main

import "fmt"

func main() {

	s0 :=[]int {1,2,3 }
	//[1 2 3]
	//直接初始化切片,[]表示是切片類型,{1,2,3}初始化值依次是1,2,3
	fmt.Println(cap(s0),len(s0))
	//cap=len=3
	s1 := s0[:]
	//[1 2 3]
	//初始化切片s,是數(shù)組arr的引用
	fmt.Println(cap(s1),len(s1))
	//cap=len=3
	s2 := s0[1:2]
	//[2]
	//將arr中從下標(biāo)startIndex到endIndex-1 下的元素創(chuàng)建為一個(gè)新的切片
	fmt.Println(cap(s2),len(s2))
	//cap=2 len=1
	s3 := s0[1:]
	//[2 3]
	//缺省endIndex時(shí)將表示一直到arr的最后一個(gè)元素
	fmt.Println(cap(s3),len(s3))
	//cap=len=2
	s4 := s0[:2]
	//[1 2]
	//缺省startIndex時(shí)將表示從arr的第一個(gè)元素開始
	fmt.Println(cap(s4),len(s4))
	//cap=3 len=2
	s5 := s4[:]
	//[1 2]
	//通過切片s初始化切片s1
	fmt.Println(cap(s5),len(s5))
	//cap=3 len=2
	s6 :=make([]int,1,2)
	//[0]
	//通過內(nèi)置函數(shù)make()初始化切片s,[]int 標(biāo)識為其元素類型為int的切片
	fmt.Println(cap(s6),len(s6))
	//cap=2 len=1
	fmt.Println(s0,s1,s2,s3,s4,s5,s6)
}

二、常見問題

1.切片的初始化與追加

代碼如下(示例):

package main

import "fmt"

func main() {

	// 由初始化已知,此時(shí)len(s) = 10 cap(s) = 10
	// make 那么此時(shí) int 已有初值 0
	s := make([]int, 10)

	// 在末尾插入三個(gè)元素 1,2,3
	s = append(s, 1, 2, 3)
	// [0 0 0 0 0 0 0 0 0 0 1 2 3]
	fmt.Println(s)

}

2.slice拼接問題

代碼如下(示例):

package main

import "fmt"

func main() {
	// 三元素切片
	s1 := []int{1, 2, 3}
	// 兩元素切片
	s2 := []int{4, 5}
	// 將 s2 兩元素從末尾插入 s1
	// s2... 即將 s2 導(dǎo)出 
	// s2... 此時(shí) 4,5
	s1 = append(s1, s2...)
	
	fmt.Println(s1)

}

3.new和make的區(qū)別

二者都是內(nèi)存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于類型的內(nèi)存分配,并且內(nèi)存置為零。所以在我們編寫程序的時(shí)候,就可以根據(jù)自己的需要很好的選擇了。

make返回的還是這三個(gè)引用類型本身;而new返回的是指向類型的指針。

總結(jié)

通過以上兩個(gè)例子可以輕松了解在Golang中數(shù)組和切片的正常形式與簡單初始化。

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

相關(guān)文章

  • 使用Go語言實(shí)現(xiàn)谷歌翻譯功能

    使用Go語言實(shí)現(xiàn)谷歌翻譯功能

    這篇文章主要為大家詳細(xì)介紹了如何使用Go語言實(shí)現(xiàn)谷歌翻譯功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-02-02
  • Go使用協(xié)程交替打印字符

    Go使用協(xié)程交替打印字符

    這篇文章主要介紹了Go使用協(xié)程交替打印字符,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go使用Gin+mysql實(shí)現(xiàn)增刪改查的詳細(xì)實(shí)例

    Go使用Gin+mysql實(shí)現(xiàn)增刪改查的詳細(xì)實(shí)例

    golang本身沒有提供連接mysql的驅(qū)動(dòng),但是定義了標(biāo)準(zhǔn)接口供第三方開發(fā)驅(qū)動(dòng),下面這篇文章主要給大家介紹了關(guān)于Go使用Gin+mysql實(shí)現(xiàn)增刪改查的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理解析

    go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理解析

    這篇文章主要介紹了go-micro使用Consul做服務(wù)發(fā)現(xiàn)的方法和原理,這里提供一個(gè)通過docker快速安裝Consul的方式,當(dāng)然前提是你得安裝了docker,需要的朋友可以參考下
    2022-04-04
  • 從并發(fā)到并行解析Go語言中的sync.WaitGroup

    從并發(fā)到并行解析Go語言中的sync.WaitGroup

    Go?語言提供了許多工具和機(jī)制來實(shí)現(xiàn)并發(fā)編程,其中之一就是?sync.WaitGroup。本文就來深入討論?sync.WaitGroup,探索其工作原理和在實(shí)際應(yīng)用中的使用方法吧
    2023-05-05
  • Golang 負(fù)載均衡算法實(shí)現(xiàn)示例

    Golang 負(fù)載均衡算法實(shí)現(xiàn)示例

    在Go語言中,負(fù)載均衡算法通常由代理、反向代理或者應(yīng)用層負(fù)載均衡器來實(shí)現(xiàn),在這些實(shí)現(xiàn)中,有一些經(jīng)典的負(fù)載均衡算法,跟隨本文來一一探究
    2024-01-01
  • Go?錯(cuò)誤處理實(shí)踐總結(jié)示例

    Go?錯(cuò)誤處理實(shí)踐總結(jié)示例

    這篇文章主要為大家介紹了Go錯(cuò)誤處理實(shí)踐的總結(jié)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • golang?chan傳遞數(shù)據(jù)的性能開銷詳解

    golang?chan傳遞數(shù)據(jù)的性能開銷詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中chan在接收和發(fā)送數(shù)據(jù)時(shí)因?yàn)椤皬?fù)制”而產(chǎn)生的開銷,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-01-01
  • GO?集合?map?使用示例小結(jié)

    GO?集合?map?使用示例小結(jié)

    Go語言的集合稱為映射(map),它是一種無序的鍵值對(key-value)的集合,集合是通過鍵(key)來快速檢索值(value)的,鍵(key)類似于索引,它指向值(value)的數(shù)據(jù),這篇文章主要介紹了GO集合map使用總結(jié),本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Go語言字典(map)用法實(shí)例分析【創(chuàng)建,填充,遍歷,查找,修改,刪除】

    Go語言字典(map)用法實(shí)例分析【創(chuàng)建,填充,遍歷,查找,修改,刪除】

    這篇文章主要介紹了Go語言字典(map)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Go語言字典的創(chuàng)建、填充、遍歷、查找、修改、刪除等操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-02-02

最新評論

泗洪县| 饶平县| 武强县| 长治县| 宣威市| 德昌县| 京山县| 尉犁县| 台东县| 南靖县| 青铜峡市| 孙吴县| 扶绥县| 裕民县| 磴口县| 浦县| 六安市| 开江县| 五台县| 吕梁市| 江口县| 江都市| 晋江市| 化隆| 罗甸县| 浙江省| 无极县| 上林县| 循化| 东乌| 永寿县| 惠州市| 天津市| 元朗区| 广宁县| 台山市| 手游| 张掖市| 五家渠市| 嘉义市| 遂平县|