溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

go語(yǔ)言元組指的是什么

發(fā)布時(shí)間:2022-12-27 11:39:24 來(lái)源:億速云 閱讀:126 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“go語(yǔ)言元組指的是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“go語(yǔ)言元組指的是什么”吧!

元組是固定長(zhǎng)度不可變的順序容器(元素序列),go語(yǔ)言中沒(méi)有元組類型,數(shù)組就相當(dāng)于元組。在go語(yǔ)言中,數(shù)組是一個(gè)由固定長(zhǎng)度的特定類型元素組成的序列,一個(gè)數(shù)組可以由零個(gè)或多個(gè)元素組成;數(shù)組的聲明語(yǔ)法為“var 數(shù)組變量名 [元素?cái)?shù)量]Type”。

什么是元組

元組(tuple):固定長(zhǎng)度不可變的順序容器,訪問(wèn)效率高,適合存儲(chǔ)一些長(zhǎng)常量數(shù)據(jù)。

簡(jiǎn)單的理解就是將一堆數(shù)據(jù)存放到一個(gè)容器中,但這個(gè)容器有一個(gè)特點(diǎn),就是很固執(zhí),一旦定義了之后就不可改變,從某種意義上來(lái)說(shuō)元組就是不可以改變的列表,功能和列表類似,同樣可以進(jìn)行切片、修改等操作。

go語(yǔ)言中沒(méi)有元組類型

go語(yǔ)言中的數(shù)組相當(dāng)于python中的元組。

數(shù)組是一個(gè)由固定長(zhǎng)度的特定類型元素組成的序列,一個(gè)數(shù)組可以由零個(gè)或多個(gè)元素組成。

Go語(yǔ)言中的數(shù)組

數(shù)組的聲明

數(shù)組的聲明語(yǔ)法如下:

var 數(shù)組變量名 [元素?cái)?shù)量]Type

語(yǔ)法說(shuō)明如下所示:

  • 數(shù)組變量名:數(shù)組聲明及使用時(shí)的變量名。

  • 元素?cái)?shù)量:數(shù)組的元素?cái)?shù)量,可以是一個(gè)表達(dá)式,但最終通過(guò)編譯期計(jì)算的結(jié)果必須是整型數(shù)值,元素?cái)?shù)量不能含有到運(yùn)行時(shí)才能確認(rèn)大小的數(shù)值。

  • Type:可以是任意基本類型,包括數(shù)組本身,類型為數(shù)組本身時(shí),可以實(shí)現(xiàn)多維數(shù)組。

在 Go 語(yǔ)言中 , 要?jiǎng)?chuàng)建數(shù)組, 可聲明一個(gè)數(shù)組變量,并指定其長(zhǎng)度和數(shù)據(jù)類型。

只包含兩個(gè)元素,無(wú)法給第 3 個(gè)元素賦值,因此這將導(dǎo)致編 譯階段錯(cuò)誤。

var cheeses [2]string
cheeses[O] = "Mar iolles”
cheeses[l] = ” Epoisses de Bourgogne ”

數(shù)組的每個(gè)元素都可以通過(guò)索引下標(biāo)來(lái)訪問(wèn),索引下標(biāo)的范圍是從 0 開(kāi)始到數(shù)組長(zhǎng)度減 1 的位置,內(nèi)置函數(shù) len() 可以返回?cái)?shù)組中元素的個(gè)數(shù)。

var a [3]int             // 定義三個(gè)整數(shù)的數(shù)組
fmt.Println(a[0])        // 打印第一個(gè)元素
fmt.Println(a[len(a)-1]) // 打印最后一個(gè)元素
// 打印索引和元素
for i, v := range a {
    fmt.Printf("%d %d\n", i, v)
}
// 僅打印元素
for _, v := range a {
    fmt.Printf("%d\n", v)
}

默認(rèn)情況下,數(shù)組的每個(gè)元素都會(huì)被初始化為元素類型對(duì)應(yīng)的零值,對(duì)于數(shù)字類型來(lái)說(shuō)就是 0,同時(shí)也可以使用數(shù)組字面值語(yǔ)法,用一組值來(lái)初始化數(shù)組:

var q [3]int = [3]int{1, 2, 3}
var r [3]int = [3]int{1, 2}
fmt.Println(r[2]) // "0"

在數(shù)組的定義中,如果在數(shù)組長(zhǎng)度的位置出現(xiàn)“...”省略號(hào),則表示數(shù)組的長(zhǎng)度是根據(jù)初始化值的個(gè)數(shù)來(lái)計(jì)算,因此,上面數(shù)組 q 的定義可以簡(jiǎn)化為:

q := [...]int{1, 2, 3}
fmt.Printf("%T\n", q) // "[3]int"

數(shù)組的長(zhǎng)度是數(shù)組類型的一個(gè)組成部分,因此 [3]int 和 [4]int 是兩種不同的數(shù)組類型,數(shù)組的長(zhǎng)度必須是常量表達(dá)式,因?yàn)閿?shù)組的長(zhǎng)度需要在編譯階段確定。

q := [3]int{1, 2, 3}
q = [4]int{1, 2, 3, 4} // 編譯錯(cuò)誤:無(wú)法將 [4]int 賦給 [3]int

比較兩個(gè)數(shù)組是否相等

如果兩個(gè)數(shù)組類型相同(包括數(shù)組的長(zhǎng)度,數(shù)組中元素的類型)的情況下,我們可以直接通過(guò)較運(yùn)算符(==和!=)來(lái)判斷兩個(gè)數(shù)組是否相等,只有當(dāng)兩個(gè)數(shù)組的所有元素都是相等的時(shí)候數(shù)組才是相等的,不能比較兩個(gè)類型不同的數(shù)組,否則程序?qū)o(wú)法完成編譯。

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) // 編譯錯(cuò)誤:無(wú)法比較 [2]int == [3]int

遍歷數(shù)組——訪問(wèn)每一個(gè)數(shù)組元素

遍歷數(shù)組也和遍歷切片類似,代碼如下所示:

var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"
for k, v := range team {
    fmt.Println(k, v)
}

代碼輸出結(jié)果:

go語(yǔ)言元組指的是什么

代碼說(shuō)明如下:

  • 第 6 行,使用 for 循環(huán),遍歷 team 數(shù)組,遍歷出的鍵 k 為數(shù)組的索引,值 v 為數(shù)組的每個(gè)元素值。

  • 第 7 行,將每個(gè)鍵值打印出來(lái)。

Golang中實(shí)現(xiàn)tuple(元組)功能

雖然其他語(yǔ)言有tuple類型,但go語(yǔ)言卻沒(méi)有提供。但無(wú)需失望,go的其他特性可以非常容易實(shí)現(xiàn)tuple功能。下面通過(guò)示例來(lái)演示Go如何實(shí)現(xiàn)tuple類型功能。

使用struct

tuple可以存儲(chǔ)不同數(shù)據(jù)類型,我們可以使用interface{}類型支持任意數(shù)據(jù)類型。

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}
*/

通過(guò)輸出可以看到結(jié)果為類似于tuple類型,并且還可以通過(guò)點(diǎn)號(hào)訪問(wèn)單個(gè)屬性。雖然這些特性都于tuple相關(guān),但實(shí)際上它不是tuple類型。

返回多個(gè)值

通過(guò)tuple 函數(shù)可以返回多個(gè)值。雖然go沒(méi)有tuple類型,但支持返回函數(shù)返回多個(gè)值:

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
*/

這里可以看到一次返回多個(gè)值。

感謝各位的閱讀,以上就是“go語(yǔ)言元組指的是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)go語(yǔ)言元組指的是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI