<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
陣列是內建(build-in)型別,是一組同型別資料的集合,它是值型別,通過從0開始的下標索引存取元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的引數傳入時將複製一份陣列而不是參照同一指標。陣列的長度也是其型別的一部分,通過內建函數len(array)獲取其長度。
Slices切片(“動態陣列")也是內建型別,但與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。切片是參照型別,因此在當傳遞切片時將參照同一指標,修改值將會影響其他的物件。
切片中有兩個概念:
package main import "fmt" func main() { //初始化陣列的初始化有多種形式,檢視範例程式碼 a0 := [5]int{1, 2, 3, 4, 5} //長度為5的陣列,其元素值依次為:1,2,3,4,5 // [1 2 3 4 5] a1 := [5]int{1, 2} //長度為5的陣列,其元素值依次為:1,2,0,0,0 。 //未指定初值的元素將會賦初值 //int的預設值0,string的預設值是"" //[1 2 0 0 0] a2 := [...]int{1, 2, 3, 4, 5} //長度為5的陣列,其長度是根據初始化時指定的元素個數決定的 // [...] 長度不固定,根據元素個數改變 // [1 2 3 4 5] a3 := [5]int{2: 1, 3: 2, 4: 3} //長度為5的陣列,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的陣列,起元素值依次為:0,0,1,0,3。由於指定了最大索引4對應的值3,根據初始化的元素個數確定其長度為5賦值與使用 // [...] 長度不固定,根據元素個數改變 // key:value 4 : 3 即 a4[4] = 3 // 所以需要有 5 個元素,即長度 [5]int // [0 0 1 0 3] fmt.Println(a0, a1, a2, a3, a4) }
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,是陣列arr的參照 fmt.Println(cap(s1),len(s1)) //cap=len=3 s2 := s0[1:2] //[2] //將arr中從下標startIndex到endIndex-1 下的元素建立為一個新的切片 fmt.Println(cap(s2),len(s2)) //cap=2 len=1 s3 := s0[1:] //[2 3] //預設endIndex時將表示一直到arr的最後一個元素 fmt.Println(cap(s3),len(s3)) //cap=len=2 s4 := s0[:2] //[1 2] //預設startIndex時將表示從arr的第一個元素開始 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] //通過內建函數make()初始化切片s,[]int 標識為其元素型別為int的切片 fmt.Println(cap(s6),len(s6)) //cap=2 len=1 fmt.Println(s0,s1,s2,s3,s4,s5,s6) }
程式碼如下(範例):
package main import "fmt" func main() { // 由初始化已知,此時len(s) = 10 cap(s) = 10 // make 那麼此時 int 已有初值 0 s := make([]int, 10) // 在末尾插入三個元素 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) }
程式碼如下(範例):
package main import "fmt" func main() { // 三元素切片 s1 := []int{1, 2, 3} // 兩元素切片 s2 := []int{4, 5} // 將 s2 兩元素從末尾插入 s1 // s2... 即將 s2 匯出 // s2... 此時 4,5 s1 = append(s1, s2...) fmt.Println(s1) }
二者都是記憶體的分配(堆上),但是make只用於slice、map以及channel的初始化(非零值);而new用於型別的記憶體分配,並且記憶體置為零。所以在我們編寫程式的時候,就可以根據自己的需要很好的選擇了。
make返回的還是這三個參照型別本身;而new返回的是指向型別的指標。
通過以上兩個例子可以輕鬆瞭解在Golang中陣列和切片的正常形式與簡單初始化。
到此這篇關於Golang中陣列和切片的文章就介紹到這了,更多相關Golang陣列和切片內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45