go語言學習 陣列 切片 map

2022-07-12 11:27:08 字數 2525 閱讀 7166

go語言中陣列的特點:

陣列的長度是固定的,並且長度也是陣列型別的一部分

是值型別,在賦值或者作為引數傳遞時,會複製整個陣列,而不是指標

定義陣列的語法:

var arr1 = [5]int          // [5]int  未初始化的值,就預設初始化為該型別的預設值

var arr2 = [...]int // [3]int 長度可由初始化的元素個數確定

var arr3 = [5]int // 可使用索引來初始化,其他值仍然是對應型別的預設值

var arr4 = [2][3]int, } // 多維陣列

可以直接使用索引值訪問

var arr = [5]string

// 這裡只接收乙個值,那這個值就是索引值

for i := range arr

// 接收兩個值,就分別是索引值 和 索引對應的陣列值

for i, v := range arr

len 和 cap 方法都可以返回陣列長度,即元素數量

slice的底層是陣列,它通過內部指標和一些相關屬性來引用陣列片段,所以slice是可以變長的

slice的結構:

struct slice
切片slice的特點:

// 通過陣列產出切片

var arr = [8]int

var s1 = arr[1:5:6] // 語法 [start: end: max], 此時 len = end - start, cap = max-start

// 直接建立切片

var s2 = int // 注意這裡宣告的是切片,""沒有數字,go會自動分配底層陣列

// 使用make動態建立切片

var s3 = make(int, 6, 8) // 語法: make(型別, len, cap); 可以省略cap,此時cap = len

// 通過切片建立新切片, 新切片仍然執行原陣列

var s4 = s1[1,2,3] // 與從陣列產生切片是相似的,不過要注意範圍

從函式的簽名就可以看出,作用是向切片的尾部新增元素,可以一次新增多個值,返回新的切片,

⼀旦超出原 slice.cap 限制,就會重新分配底層陣列,即便原陣列並未填滿。

func copy(dst, src t) int
這個方法將型別為 t 的切片從源位址 src 拷貝到目標位址 dst,覆蓋 dst 的相關元素,並且返回拷貝的元素個數。

源位址和目標位址可能會有重疊。拷貝個數是 src 和 dst 的長度最小值。

具體還是得看例子

src := int

dst := int

num := copy(dst, src) // dst=int, num=3

src2 := int

dst2 := [2,3,4,5]

num2 := copy(dst2, src2) // dst2=int, num2=3

src3 := int

dst3 := int

num3 := copy(dst3, src3) // dst3=int num3=3

len()和map()方法分別返回切片中的元素數量 和 切片的容量

map型別是一種叫雜湊表的資料結構,在python中叫字典,還稱為關聯陣列。它是一組無序鍵值對的集合。給定鍵可以快速的定位對應的值

特點:定義語法:

map[keytype]valuetype

// eg:

m := map[string]int"放在這個一行

}

還可以使用 make 函式來定義乙個map,有助於提公升效能。因為事先申請⼀⼤塊記憶體,可避免後續操作時頻繁擴張。

語法:

// 這裡的 length 是map的初始容量,可以不加,不過在新增元素時會平凡擴張,影響效能

make(map[keytype][valuetype][, length])

可以使用 map[key] 直接訪問對應的值

eg:

var m = map[int]string

// 迭代map

for k := range m

// 還可以直接獲得鍵和值

for k, v := range m

我們很多時候都會使用到

// 這裡使用了初始化,如果key存在, ok就是true, _接收的第一的引數就是值

// 如果key不存在,ok就是false

if _, ok := m[key]; ok

刪除鍵前,還可以先判斷鍵是否存在,如果鍵不存在會報錯

var m = map[int]string

delete(m, 1) // 刪除鍵為1的鍵值對

GO語言學習 切片

切片的長度可以用len獲得,容量由cap獲得.s1 make int,5 len s1 可以得到長度為5,cap s1 可以得到容量為5 s2 make int,5,8 len s2 可以得到長度為5,cap s2 可以得到容量為8 在s1中我沒有用make說明此切片的容量,因此他的容量和長度相等都...

go語言學習 四 陣列和切片

在go語言中,陣列和切片都是集合型別,他們都是用來儲存同一種型別的元素。1.陣列型別的長度是固定的,而切片型別的長度是可變長的。如下面 宣告乙個長度為5的陣列s1和長度為5的切片s2,s1 5 int s2 int但是s1是不可變的,而s2是可變的,可以增加元素,長度隨著元素數量而增長。因此陣列是乙...

Go語言學習十一 go語言切片

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。你可以宣告乙個未指定大小的陣列來定義切片 var identifier typ...