go語言初探 六

2021-10-12 10:23:03 字數 1264 閱讀 5702

陣列和切片

陣列就不細講, 幾乎每種語言都有。編譯期間確定大小,而且型別相同。不初始化的話,編譯器會把陣列各個值置為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裡面宣告變數的方...