元組是固定長度不可變的順序容器(元素序列),go語言中沒有元組型別,陣列就相當於元組。在go語言中,陣列是一個由固定長度的特定型別元素組成的序列,一個陣列可以由零個或多個元素組成;陣列的宣告語法為「var 陣列變數名 [元素數量]Type」。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
什麼是元組
元組(tuple):固定長度不可變的順序容器,存取效率高,適合儲存一些長常數資料。
簡單的理解就是將一堆資料存放到一個容器中,但這個容器有一個特點,就是很固執,一旦定義了之後就不可改變,從某種意義上來說元組就是不可以改變的列表,功能和列表類似,同樣可以進行切片、修改等操作。
go語言中沒有元組型別
go語言中的陣列相當於python中的元組。
陣列是一個由固定長度的特定型別元素組成的序列,一個陣列可以由零個或多個元素組成。
Go語言中的陣列
陣列的宣告
陣列的宣告語法如下:
var 陣列變數名 [元素數量]Type
登入後複製
語法說明如下所示:
陣列變數名:陣列宣告及使用時的變數名。
元素數量:陣列的元素數量,可以是一個表示式,但最終通過編譯期計算的結果必須是整型數值,元素數量不能含有到執行時才能確認大小的數值。
Type:可以是任意基本型別,包括陣列本身,型別為陣列本身時,可以實現多維陣列。
在 Go 語言中 , 要建立陣列, 可宣告一個陣列變數,並指定其長度和資料型別。
只包含兩個元素,無法給第 3 個元素賦值,因此這將導致編 譯階段錯誤。
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 行,將每個鍵值列印出來。
Golang中實現tuple(元組)功能
雖然其他語言有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視訊教學、】
以上就是go語言中元組是什麼的詳細內容,更多請關注TW511.COM其它相關文章!