您好,登錄后才能下訂單哦!
這篇文章主要講解了“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é)果:
代碼說(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)注!
免責(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)容。