Go 語言陣列被設計成值型別有什麼用呢?

時間 2021-12-25 08:20:26

1樓:青青青

Go 語言提供了陣列型別的資料結構。

陣列是具有相同唯一型別的一組已編號且長度固定的資料項序列,這種型別可以是任意的原始型別例如整型、字串或者自定義型別。

相對於去宣告number0, number1, ..., number99的變數,使用陣列形式numbers[0], numbers[1] ..., numbers[99]更加方便且易於擴充套件。

陣列元素可以通過索引(位置)來讀取(或者修改),索引從 0 開始,第乙個元素索引為 0,第二個索引為 1,以此類推。

Go 語言陣列宣告需要指定元素型別及元素個數,語法格式如下:

var variable_name [SIZE] variable_type

以上為一維陣列的定義方式。例如以下定義了陣列 balance 長度為 10 型別為 float32:

var balance [10] float32

以下演示了陣列初始化:

var balance = [5]float32

我們也可以通過字面量在宣告陣列的同時快速初始化陣列:

balance := [5]float32

如果陣列長度不確定,可以使用...代替陣列的長度,編譯器會根據元素個數自行推斷陣列的長度:

var balance = [...]float32

或balance := [...]float32

如果設定了陣列的長度,我們還可以通過指定下標來初始化元素:

// 將索引為 1 和 3 的元素初始化

balance := [5]float32

初始化陣列中{}中的元素個數不能大於中的數字。

如果忽略中的數字不設定陣列大小,Go 語言會根據元素的個數來設定陣列的大小:

balance[4] = 50.0

以上例項讀取了第五個元素。陣列元素可以通過索引(位置)來讀取(或者修改),索引從 0 開始,第乙個元素索引為 0,第二個索引為 1,以此類推。

陣列元素可以通過索引(位置)來讀取。格式為陣列名後加中括號,中括號中為索引的值。例如:

var salary float32 = balance[9]

以上例項讀取了陣列 balance 第 10 個元素的值。

以下演示了陣列完整操作(宣告、賦值、訪問)的例項:

例項 1

packagemain

import"fmt"

func main()

/* 輸出每個陣列元素的值 */

forj = 0; j < 10; j++

}以上例項執行結果如下:

Element[0] = 100

Element[1] = 101

Element[2] = 102

Element[3] = 103

Element[4] = 104

Element[5] = 105

Element[6] = 106

Element[7] = 107

Element[8] = 108

Element[9] = 109

例項 2

packagemain

import"fmt"

func main()

/* 輸出陣列元素 */...

fori = 0; i < 5; i++

balance2 := [...]float32

/* 輸出每個陣列元素的值 */

forj = 0; j < 5; j++

// 將索引為 1 和 3 的元素初始化

balance3 := [5]float32

fork = 0; k < 5; k++

}以上例項執行結果如下:

balance[0] = 1000.000000

balance[1] = 2.000000

balance[2] = 3.400000

balance[3] = 7.000000

balance[4] = 50.000000

balance2[0] = 1000.000000

balance2[1] = 2.000000

balance2[2] = 3.400000

balance2[3] = 7.000000

balance2[4] = 50.000000

balance3[0] = 0.000000

balance3[1] = 2.000000

balance3[2] = 0.000000

balance3[3] = 7.000000

balance3[4] = 0.000000

內容描述

2樓:Haart

值型別的區域性變數可以在棧上分配。而且無論需要分配多少個值型別的區域性變數,都只需要一條指令。

因為值型別的變數,占用的長度是固定的,可以在編譯階段就計算出來。呼叫函式時只要將棧指標移動對應的總長度就可以了。

代價是:宣告陣列變數時必須指定長度且不能更改。

Go 語言陣列作為引數傳遞時為什麼要用值傳遞?

瀟灑哥和黑大帥 首先明確一點,指標傳遞 引用傳遞 不一定比值傳遞效率高,原因如下 如果存在引用,經過逃逸分析會放在堆上。而如果陣列只是拷貝,經過逃逸分析會放在棧上。棧上分配記憶體比在堆中分配記憶體有更高的效率。棧上分配的記憶體不需要GC處理。堆上分配的記憶體使用完畢會交給GC處理。逃逸分析目的是決定...

go語言中的slice 型別指向陣列的位址到底是unsafe Point型別,還是uintptr型別?

gao xinge slice header裡面是unsafe.Pointer,還是uintptr?在runtime slice.go裡面,即在slice的定義裡面,但沒有暴露給使用者,使用的是unsafe.Pointer 在reflect value.go裡面,即暴露給使用者,用於反射操作,使用的...

Go 語言返回值是引用時return後省略是推薦寫法嗎?

初一公主奶爸 返回指標主要在這幾個場景 結構體較大,要求高效能,減少記憶體複製。物件導向程式設計的時候,需要在方法內修改結構體內的字段時。希望在多個外層函式裡修改結構體值的時候。 冒泡 我比較推薦的做法是,如果你是命名返回的宣告方式,就採用賦值並且單獨return語句返回,否則最好不要用命名返回 如...