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語句返回,否則最好不要用命名返回 如...