go語言數(shù)據(jù)結(jié)構(gòu)分為哪幾類

這篇文章主要介紹“go語言數(shù)據(jù)結(jié)構(gòu)分為哪幾類”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“go語言數(shù)據(jù)結(jié)構(gòu)分為哪幾類”文章能幫助大家解決問題。

目前創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護、企業(yè)網(wǎng)站設(shè)計、贛榆網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

go語言數(shù)據(jù)結(jié)構(gòu)有四大類:1、基礎(chǔ)類型,包括整型(有符號和無符號整數(shù))、浮點數(shù)、復(fù)數(shù)、字符串(由不可變的字節(jié)序列構(gòu)成)、布爾值(只有true和false兩個值);2、聚合類型,包括數(shù)組、結(jié)構(gòu)體(是由任意個任意類型的變量組合在一起的數(shù)據(jù)類型);3、引用類型,包括指針、slice(是一個擁有相同元素的可變長度序列)、map、function、channel;4、接口類型。

每一門語言都有自己的數(shù)據(jù)結(jié)構(gòu),Go 語言也不例外,總共有四大類,基礎(chǔ)類型、聚合類型、引用類型和接口類型。

1. 基礎(chǔ)類型

整型

Go 的整型分為有符號和無符號整數(shù)。

有符號整數(shù)會分成 int8、int16、int32、int64

無符號整數(shù)會分成 uint8、uint16、uint32、uint64

但通常會直接使用 int 和 uint,因為這兩種類型會根據(jù)平臺的特性,自動轉(zhuǎn)成運算效率最高的類型,現(xiàn)在 32 位以下的計算機一級很少見了,所以 int 通常是 32 或者 64位,但具體要根據(jù)平臺和編譯器決定。

int 是目前使用最廣泛的數(shù)值類型,在需要明確指定數(shù)值位數(shù)的時候,直接使用 int 就可以。

通常來說,有符號的整數(shù)就夠用,無符號整數(shù)只有在位運算或者特定算數(shù)的時候才會使用。

uintptr 和 rune 是兩類特殊的數(shù)字類型,uintptr 大小不明確,用來存儲指針,主要用于底層編程,比如用于 Go 語言與 C 語言的交互。

如果兩個值可以使用 == 和 != 進行比較,說明這個兩個值是可比較的。

整數(shù)是可比較的。

其他數(shù)字類型

除了整型數(shù)據(jù)之外,Go 語言中,還有兩種數(shù)據(jù)類型:浮點數(shù)復(fù)數(shù)。

浮點數(shù)有 float32 和 float64 兩種類型,浮點數(shù)一般使用指數(shù)表示法,使用 e 或者 E 來表示。

float32 的正數(shù)范圍是 1.4e-45 ~ 3.4e38

float64 的正數(shù)范圍是 4.9e-324 ~ 1.8e308

在 10 進制下,float64 的有效數(shù)字是 15 位,遠(yuǎn)遠(yuǎn)超過了 float32 的 5 位,如果沒有特殊的情況,應(yīng)該優(yōu)先使用 float64。

復(fù)數(shù)也有兩種 complex64 和 complex128,這兩種類型分別由 float32 和 float64 構(gòu)成。math/cmplx 庫提供了復(fù)數(shù)運算所需要的函數(shù)。

浮點數(shù)和復(fù)數(shù)都是可比較的。

字符串

字符串可是說是最常用的數(shù)據(jù)類型。字符串由不可變的字節(jié)序列([]byte)構(gòu)成,字符串的內(nèi)容通常會用 UTF-8 的編碼格式處理,這點在上一篇文章中已經(jīng)詳細(xì)的說明過了。

Go 的字符串內(nèi)容是不可變的,對當(dāng)前字符串做的操作都會生成一個新的字符串。Go 字符串天然支持 UTF-8,而且習(xí)慣上也會優(yōu)先使用這種編碼方式,亂碼的煩惱會少一些。

Go 語言也為字符串提供了豐富的類庫:

  • bytes:用于操作字節(jié)slice([]byte),如果需要對字符串進行頻繁的修改, 使用 byte.Buffer 會高效

  • strings:用于搜索、替換等等字符傳操作

  • strconv:主要用于字符串和其他基本數(shù)據(jù)類型之間的轉(zhuǎn)換

  • unicode:用來判斷字符的特性,比如是否是數(shù)字、是否大寫等等

字符串是可比較的。

布爾值

布爾值相對來說比較簡單,只有兩個值: truefalse。可以使用 ! 符號來進行取反運算,!true 就是 false。

也可以使用 && 和 || 來進行組合運算,在組合運算中,也會遵循短路行為,短路行為是指左邊如果能直接確定最后的結(jié)果,那么后面的計算將不會進行,如下:

var i = 1
// i < 100 代碼就不會被執(zhí)行
if i > 0 || i < 100 {
    fmt.Printf("result %+v", i)
}

布爾值是可比較的。

2. 聚合類型

聚合類型的值由內(nèi)存中的一組變量構(gòu)成。數(shù)組和結(jié)構(gòu)體都是聚合類型,數(shù)組和結(jié)構(gòu)體的長度都是固定的。數(shù)組中的的元素類型必須相同,而結(jié)構(gòu)體中的元素可以不同。

數(shù)組

數(shù)組是一個長度固定,擁有0 個或多個(不超過數(shù)組長度)相同數(shù)據(jù)類型的序列。數(shù)組在聲明的時候必須指定長度,可以使用常量,但是不能使用變量。

實際上,我們很少在代碼中直接使用數(shù)組,數(shù)組在絕大部分的時候都是做為 slice 的底層存儲,并不會直接使用。

數(shù)組的可比較性取決于元素的可比較性,如果元素是可比較的,那么數(shù)組也是可比較的,反之亦然。

結(jié)構(gòu)體

結(jié)構(gòu)體是由任意個任意類型的變量組合在一起的數(shù)據(jù)類型,和其他語言中的概念相似。

type Student struct {
    Name string
    age  int
}

Go 語言是一個面向?qū)ο蟮恼Z言,但卻又拋棄了 Java 中類和對象的概念,結(jié)構(gòu)體是 Go 語言實現(xiàn)面向?qū)ο蟮幕A(chǔ)之一,還有一部分是接口,下面會聊到。

在 Go 的面向?qū)ο笾?,已?jīng)擯棄了繼承的概念,但在結(jié)構(gòu)體中,通過結(jié)構(gòu)體嵌套,也算是實現(xiàn)了部分繼承的功能。

結(jié)構(gòu)體的可比較性也取決于其中變量的可比較性。

3. 引用類型

引用是另外一種數(shù)據(jù)類型,很多 Go 語言的高級功能都依賴引用。引用都間接指向變量或者狀態(tài),通過引用來操作數(shù)據(jù)會讓該數(shù)據(jù)的全部引用都受影響。

指針

指針是一種數(shù)據(jù)類型,指針的值是一個變量的地址。對于一個變量來說,可以有多個指針,通過其中任意一個指針來修改數(shù)據(jù),通過其他指針也會獲取到最新修改的值。

i := 1
p1 := &i
p2 := &i

*p1 = 2

fmt.Println(*p2) // 2

指針是可比較的。

slice

slice 是一個擁有相同元素的可變長度序列。 slice 看起來與數(shù)組很像,但本質(zhì)上不同。

slice 依賴數(shù)組,沒有數(shù)組,就沒有 slice。

一個 slice 有三個屬性,指針,長度和容量。其中指針指向數(shù)組中的某個元素(不一定是第一個),這是 slice 可以訪問的第一個元素。

長度是 slice 中元素的個數(shù),不能超過容量,容量通常是指 slice 指針的位置,到底層數(shù)組的最后一個元素的位置的長度。

slice 不可比較, 只能和 nil 比較。

map

map 是散列表的引用。

map 的使用很簡單,但是需要注意一點,map 的 key 必須是可比較的,如果 key 不可比較,那就無法通過 key 查詢到響應(yīng)的 value,value 的類型是沒有限制的,可以是任意值。

map 不可比較,只能和 nil 比較。

function

function 就是函數(shù),在寫 Go 的 helloworld 程序時,就會用到函數(shù)。 函數(shù)也是一種引用類型。

function 本身不可比,只能和 nil 比較,但是可以通過反射獲取函數(shù)指針進行比較。

channel

Go 語言天然支持搞并發(fā)。而 channel 就是其中關(guān)鍵一環(huán),goroutine 用來并發(fā)執(zhí)行任務(wù)。而 channel 則用來連接不同的 goroutine。channel 也是屬于引用類型。

channel 是可比較的。

4. 接口類型

Go 語言中還有一個類型是接口類型。

接口是 Go 實現(xiàn)面向?qū)ο蟮年P(guān)鍵。Go 的接口類型很特別,你不需要去顯示的實現(xiàn)一個接口,只要把接口中的方法實現(xiàn),就默認(rèn)實現(xiàn)了這個接口。

接口類型是可比較的。

關(guān)于“go語言數(shù)據(jù)結(jié)構(gòu)分為哪幾類”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

本文名稱:go語言數(shù)據(jù)結(jié)構(gòu)分為哪幾類
URL鏈接:http://muchs.cn/article26/piojcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司全網(wǎng)營銷推廣、域名注冊網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)