元組是固定長度不可變的順序容器(元素序列),go語言中沒有元組類型,陣列就相當於元組。在go語言中,數組是一個由固定長度的特定類型元素組成的序列,一個數組可以由零個或多個元素組成;數組的聲明語法為“var 數組變數名 [元素數量]Type”。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
什麼是元組
##元組(tuple):固定長度不可變的順序容器,存取效率高,適合儲存一些長常量數據。 簡單的理解就是將一堆資料存放到一個容器中,但這個容器有一個特點,就是很固執,一旦定義了之後就不可改變,從某種意義上來說元組就是不可以改變的列表,功能和列表類似,同樣可以進行切片、修改等操作。
go語言中沒有元組類型
#go語言中的陣列相當於python中的元組。陣列是一個由固定長度的特定類型元素組成的序列,一個陣列可以由零個或多個元素組成。
Go語言中的陣列#陣列的宣告
var 数组变量名 [元素数量]Type語法說明如下:
var cheeses [2]string cheeses[O] = "Mar iolles” cheeses[l] = ” Epoisses de Bourgogne ”數組的每個元素都可以透過索引下標來訪問,索引下標的範圍是從0 開始到數組長度減1 的位置,內建函數 len() 可以傳回數組中元素的個數。
var a [3]int // 定义三个整数的数组 fmt.Println(a[0]) // 打印第一个元素 fmt.Println(a[len(a)-1]) // 打印最后一个元素 // 打印索引和元素 for i, v := range a { fmt.Printf("%d %d\n", i, v) } // 仅打印元素 for _, v := range a { fmt.Printf("%d\n", v) }預設情況下,數組的每個元素都會被初始化為元素類型對應的零值,對於數字類型來說就是0,同時也可以使用數組字面值語法,用一組值來初始化數組:
var q [3]int = [3]int{1, 2, 3} var r [3]int = [3]int{1, 2} fmt.Println(r[2]) // "0"在數組的定義中,如果在數組長度的位置出現“...”省略號,則表示數組的長度是根據初始化值的個數來計算,因此,上面數組q 的定義可以簡化為:
q := [...]int{1, 2, 3} fmt.Printf("%T\n", q) // "[3]int"陣列的長度是陣列類型的組成部分,因此[3]int 和[4]int 是兩種不同的陣列類型,陣列的長度必須是常數表達式,因為數組的長度需要在編譯階段決定。
q := [3]int{1, 2, 3} q = [4]int{1, 2, 3, 4} // 编译错误:无法将 [4]int 赋给 [3]int
比較兩個數組是否相等
如果兩個數組類型相同(包括數組的長度,數組中元素的類型)的情況下,我們可以直接透過較運算子(==和!=)來判斷兩個數組是否相等,只有當兩個數組的所有元素都是相等的時候數組才是相等的,不能比較兩個類型不同的數組,否則程式將無法完成編譯。a := [2]int{1, 2} b := [...]int{1, 2} c := [2]int{1, 3} fmt.Println(a == b, a == c, b == c) // "true false false" d := [3]int{1, 2} fmt.Println(a == d) // 编译错误:无法比较 [2]int == [3]int遍歷陣列-存取每一個陣列元素
var team [3]string team[0] = "hammer" team[1] = "soldier" team[2] = "mum" for k, v := range team { fmt.Println(k, v) }
程式碼輸出結果:
#第6 行,使用for 循環,遍歷team 數組,遍歷出的鍵k為數組的索引,值v 為數組的每個元素值。
第 7 行,將每個鍵值列印出來。雖然其他語言有tuple類型,但go語言卻沒有提供。但無需失望,go的其他特性可以非常容易實現tuple功能。下面透過範例來示範Go如何實現tuple類型功能。
tuple可以儲存不同資料類型,我們可以使用interface{}類型支援任意資料類型。package main import "fmt" func main() { type Student struct { name, age interface{} } stuList1 := []Student{ {"tom", 21}, {"jack", 22}, } stuList2 := []Student{ {"mary", 30}, } // append stuList2 to stuList1 stuList1 = append(stuList1, stuList2...) for _, stu := range stuList1 { fmt.Println(“stuInfo:”,stu) } } /* Output: stuInfo: {tom 21} stuInfo: {jack 22} stuInfo: {mary 30} */透過輸出可以看到結果為類似於tuple類型,並且也可以透過點號存取單一屬性。雖然這些特性都於tuple相關,但實際上它不是tuple類型。 #########傳回多個值#########透過tuple 函數可以傳回多個值。雖然go沒有tuple類型,但支援返回函數傳回多個值:###
package main import "fmt" func multipleValues() (string, int) { return "Alex", 21 } func main() { name, age := multipleValues() fmt.Println("Name :", name) fmt.Println("Age :", age) } /* Output: Name : Alex Age : 21 */###這裡可以看到一次傳回多個值。 ###
以上是go語言中元組是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!