陣列
陣列是指一系列同一型別資料的集合。陣列中包含的每個資料被稱為陣列元素(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服務再做乙個簡單的記錄。乙個供外部呼叫的釋放資...