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...