首頁  >  文章  >  後端開發  >  go語言中元組是什麼

go語言中元組是什麼

青灯夜游
青灯夜游原創
2022-12-27 11:27:274919瀏覽

元組是固定長度不可變的順序容器(元素序列),go語言中沒有元組類型,陣列就相當於元組。在go語言中,數組是一個由固定長度的特定類型元素組成的序列,一個數組可以由零個或多個元素組成;數組的聲明語法為“var 數組變數名 [元素數量]Type”。

go語言中元組是什麼

本教學操作環境: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
go語言中元組是什麼

遍歷陣列-存取每一個陣列元素

    #遍歷陣列也和遍歷切片類似,程式碼如下:
  • 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類型功能。

使用struct

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語言中元組是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn