陣列和切片
陣列就不細講, 幾乎每種語言都有。編譯期間確定大小,而且型別相同。不初始化的話,編譯器會把陣列各個值置為0。
陣列定義:
//方式一
var arr1 = [5]int{}
//方式二
var arr2 = [5]int
//方式三
var arr3 = [5]int
賦值的話還是通過迴圈賦值。
for i := 0; i < len(arr1); i++
遍歷陣列
for index, value := range arr1
陣列作為函式的引數:
go語言在傳遞陣列時會對其進行拷貝,所以如果傳遞的是大陣列的話會非常佔記憶體,所以一般情況下很少直接傳遞乙個陣列,避免這種情況我們可以使用以下兩種方式:
傳遞陣列的指標
傳遞切片
指標陣列和陣列指標指標陣列:乙個陣列裡面裝的都是指標。 編譯器初始化值全為
陣列指標:指向陣列的指標。
在go語言中陣列預設是值傳遞的
切片
切片操作與陣列類似,但是它的長度是不固定的,可以追加元素,如果達到當前切片容量的上限會再自動擴容。
定義://方法一
var s1 = int{}
//方法二
var s2 = int
//方法三
var s3 = make(int, 5)
//方法四
var s4 = make(int, 5, 10)
var s4 = make(int, 5, 10)
方法一宣告了乙個空切片,方法二宣告了乙個長度為3的切片,方法三宣告了乙個長度為5的空切片,方法四宣告了乙個長度為5容量為10的切片。可以看到切片的定義與陣列類似,但是定義切片不需要為其指定長度。
切片與陣列的關係
對於任何乙個切片來說,其都有乙個底層陣列與之對應,我們可以將切片看作是乙個視窗,透過這個視窗可以看到底層陣列的一部分元素。
如上宣告b切片時,其長度比a切片長
宣告c切片時,其長度比a切片短
宣告d切片時,其長度被定義為0
結果如圖所示。
GO語言初探
學習參考 學習go語言 q1.0 for loop 1.建立乙個基於 for 的簡單的迴圈。使其迴圈 10 次,並且使用 fmt 包列印出計數 器的值。package main func main 用 goto 改寫 1 的迴圈。關鍵字 for 不可使用。package main func main...
Go語言初探
大寫字母開頭變數為共有變數,小寫字母開頭為私有變數 函式類似 iota列舉 預設開始值為0,const中每增加一行,值加1 引用型別 類似於動態陣列 相比於array,它沒有長度限制 由於可隨意跳轉,在龐大的系統中不利於debug,所以在coding中會通過結構化程式設計來規避這類問題,那麼,在go...
go語言初探 三
說真的看到go的語法後,我還有點不習慣,感覺它的語法規則很奇怪。但或許就是這樣的語法規則讓它的執行速度變快?這也未可知。在go裡有變數和常量,但沒有列舉。列舉可以用關鍵字const去模擬。常量只能是布林型 數字型 整數型 浮點型和複數 和字串型。編譯器可以根據變數的值來判斷型別。go裡面宣告變數的方...