golang 包含 陣列 Golang陣列型別

2021-10-13 05:48:40 字數 1663 閱讀 4108

陣列

陣列是指一系列同一型別資料的集合。陣列中包含的每個資料被稱為陣列元素(element),乙個陣列包含的元素個數被稱為陣列的長度。

1. 宣告方法

[32]byte //長度為32的陣列

[2*n] struct //複雜型別陣列

[100]*float64 //指標陣列

[3][5]int //二維陣列

[2][2][2]float64 //等同於[2]([2]([2]float64))

陣列的長度在宣告時就已經確定,後面不能再次修改。可以使用len()函式來求陣列的長度。

2. 元素訪問

使用下標訪問陣列,同c語言一樣,下標也是從0開始

for i := 0; i < len(array); i++

modify(array)

fmt.println("in main, array values:", array)

它的輸出為:

in modify, array values: [10 2 3 4 5]

in main, array values: [1 2 3 4 5]

4.陣列切片

在前面我們提到,陣列有兩個特性

陣列長度在定義後無法改變

陣列是值型別,在引數傳遞時會產生副本。

這兩大特性使得陣列無法適應開發者的真實需求。所以我們使用陣列切片(slice)來彌補

陣列的不足。

從底層的角度看,陣列切片仍然使用陣列來管理元素。基於陣列,陣列切片新增了一系列管理功能。可以隨時動態擴充存放空間。並且在傳參時不會產生複製。

4.1 基於陣列建立陣列切片

var marr [5]int = [5]int

var mslice int = marr[:3]

golang支援使用array[first:last]的方式來基於陣列生成乙個陣列切片。

4.2 直接建立陣列切片

myslice1 := make(int, 5) //建立乙個初始元素為5的陣列切片,元素初始值為0

myslice2 := make(int, 5, 10) //建立乙個初始元素為5的陣列切片,元素初始值為0,並且預留10個元素空間。

myslice3 := int //建立,並初始化乙個陣列切片

4.3 遍歷

同陣列一樣,我們可以使用下標或者range的方式遍歷陣列切片

4.4 動態增減元素

go語言內建len()和cap()方法。len()函式返回陣列切片當前儲存的元素個數,cap()函式返回陣列切片分配的空間大小。例如:

myslice := make(int, 5, 10)

len(myslice) //5

cap(myslice) //10

4.4.1 新增元素

myslice2 := int

5. 內容複製

go語言另乙個內建函式copy(),用於將內容從乙個陣列切片複製到另乙個陣列切片。如果兩個陣列切片不一樣大。如果加入兩陣列切片不一樣大,就會按較小的那個陣列切片的元素個數進行複製。

slice1 := int

slice2 := int

copy(slice2, slice1) //只會複製slice1前三個元素到slice2中

copy(slice1, slice2) //只會複製slice2的3個元素到slice1的前三個位置。

golang 包含 陣列 Golang 陣列與分片

與陣列的區別陣列是固定長度的,而分片確實可動態增長的,以定義為例 定義陣列,一定要指定長度var names 5 string 定義分片,不需要指定長度var names string在函式呼叫時,陣列是值傳遞,而分片是引用傳遞 其實對於 golang 來講,函式呼叫的時候都是值傳遞,拷貝乙個副本,...

golang學習筆記 優雅的退出golang服務

寫了一段時間的golang後台,怎麼優雅的退出程式一直是乙個很模糊的問題。思路還是之前的思路,各種標誌和變數來回控制,雖然說是能夠滿足需求,但是總感覺那開啟的姿勢不對,下面對優雅的退出golang做乙個小總結,廢話不多說,直接上 主程式 模擬乙個服務物件,函式reload和close分別是過載和退出...

golang學習筆記 優雅的退出golang服務2

前不久介紹了如何比較 優雅的退出golang服務 雖然能夠優雅的退出,但是只是簡單的監聽了系統的訊號,後續服務模組得到資源釋放又牽扯到更多的邏輯。對於服務啟動的子協程的宣告週期顯然沒有考慮到。經過一些時間的實踐和閱讀大佬們的 對如何優雅的退出golang服務再做乙個簡單的記錄。乙個供外部呼叫的釋放資...