【Go數(shù)據(jù)類型】

任何一門語言都有對應(yīng)的基礎(chǔ)類型,這些基礎(chǔ)類型和現(xiàn)實(shí)中的事物一一對應(yīng)。Go語言也不例外,Go語言數(shù)據(jù)類型包含基礎(chǔ)類型復(fù)合類型兩大類。

基礎(chǔ)數(shù)據(jù)類型包括:布爾型、整型、浮點(diǎn)型、復(fù)數(shù)型、字節(jié)型(byte)、字符串型、Unicode(rune類型,代表一個(gè)utf-8字符)。

Go語言的字符有以下兩種:

  1. uint8 類型,或者叫byte型,代表了一個(gè)ASCII的字符

  2. rune 類型,代表一個(gè)UTF-8字符。當(dāng)需要處理中文、日文或者其他復(fù)合字符時(shí),需要用到rune類型。rune類型實(shí)際是一個(gè)int32。

  3. Go使用了特殊的rune類型來處理Unicode,讓基于Unicode的文本處理更為方便,也可以使用byte型進(jìn)行默認(rèn)字符串處理,性能和擴(kuò)展性都有照顧。

復(fù)合數(shù)據(jù)類型包括:指針、數(shù)組、切片、字典、通道、結(jié)構(gòu)體、接口。

整型

在Go語言中,整型分為:

  • 有符號(hào)整型:如int、int8、int16、int32和int64

  • 無符號(hào)整型:uint、uint8、uint16、uint32和uint64

它們的差別在于,有符號(hào)整型表示的是數(shù)值可以為負(fù)數(shù)、零和正數(shù),而無符號(hào)整型只能是零和正數(shù)。在整型中,如果能確定int的bit就選擇比較明確的int類型,因?yàn)檫@樣會(huì)讓程序具備很好地移植性。

在Go語言中,還有一種字節(jié)類型byte,它等價(jià)于uint8類型,可以理解為uint8類型的別名,用于定義一個(gè)字節(jié),所以字節(jié)byte類型屬于整型。

浮點(diǎn)數(shù)

浮點(diǎn)數(shù)就是代表現(xiàn)實(shí)中的小數(shù)。Go語言提供了兩種精度的浮點(diǎn)數(shù),分別是float32 和float64。項(xiàng)目中最常用的是float64,因?yàn)樗木雀?,浮點(diǎn)計(jì)算的結(jié)果相比float32誤差更小。

【布爾型】

一個(gè)布爾型的值只有兩種:true和false,它們代表的現(xiàn)實(shí)中的“是”或“否”。它們的值經(jīng)常被用于一些判斷中。Go語言中的布爾型使用關(guān)鍵字bool定義。

【字符串】

Go語言中的字符串可以表示任意數(shù)據(jù),Go語言中,字符串通過類型string聲明??梢酝ㄟ^操作符 + 把字符串拼接起來。也可以通過+=運(yùn)算符操作。

【零值】

零值其實(shí)就是一個(gè)變量的默認(rèn)值,在Go語言中,如果我們聲明了一個(gè)變量,但是沒有對其初始化,那么Go語言會(huì)自動(dòng)初始化其值為對應(yīng)類型的零值。比如數(shù)字類的零值是0,布爾型的零值是false,字符串的零值是""空字符串

變量聲明

變量代表可變的數(shù)據(jù)類型,即在程序執(zhí)行過程中可能會(huì)被一次甚至多次修改。

在Go語言中,通過var關(guān)鍵字聲明語句來定義一個(gè)變量,定義的時(shí)候需要制定這個(gè)變量的類型,然后在為它取個(gè)名字,并且設(shè)置好變量的初始值。var聲明一個(gè)變量的格式如下:

 var 變量名  類型 = 表達(dá)式

Go語言中定義的變量必須使用,否則無法編譯通過,這也是Go語言比較好的特性, 防止定義了變量不使用,導(dǎo)致浪費(fèi)內(nèi)存的情況。

Go語言具有類型推到功能,所以可以不用刻意的指定變量的類型,而是讓Go語言自己推導(dǎo),比如變量i的聲明如下:

 var i = 10
image.gif

此時(shí)變量i的類型默認(rèn)是int類型。也可以一次聲明多個(gè)變量,把要聲明的變量放到一個(gè)括號(hào)中即可,如下所示:

 var(
     j int = 1 
     k int = 2
 )
 
 // 因?yàn)轭愋屯茖?dǎo),上面的多變量聲明可以簡寫為如下方式
 var (
     j = 1
     k = 2
 )
image.gif

不止int類型,后面介紹的float64、bool、string 等基礎(chǔ)類型都可以被自動(dòng)推導(dǎo),即可以省略定義類型。

變量簡短聲明

使用var關(guān)鍵字聲明變量,代碼很繁瑣,借助類型推導(dǎo),Go語言提供了變量的簡短聲明** :=**, 結(jié)構(gòu)如下:

 變量名 := 表達(dá)式
 i := 10
 bf := false
 s1 := "hello"
image.gif

實(shí)際項(xiàng)目實(shí)戰(zhàn)中,如果能為聲明的變量初始化,那就選擇簡短聲明方式,這種方式是使用最多的。

指針

在Go語言中,指針對應(yīng)的是變量在內(nèi)存中的存儲(chǔ)位置,也就是說指針的值就是變量的內(nèi)存地址。通過&可以獲取一個(gè)變量的地址,也就是指針。想要獲得指針指向的變量的值,通過***** 表達(dá)式即可。

 p1 := &i
 fmt.Println(*p1)
image.gif

賦值

最簡單的賦值語句就是=。

常量

一門編程語言,有變量就有常量,Go語言也不例外。在程序中,常量的值是指在編譯期就確定好的,一旦確定好之后就不能再修改,這樣就可以防止在運(yùn)行期被惡意篡改。

常量的定義

常量的定義和變量類似,通過關(guān)鍵字const,因?yàn)镚o語言可以類型推導(dǎo),所以在常量聲明是可以忽略類型。在Go語言中,只允許布爾型、字符串、數(shù)字類型這些基礎(chǔ)類型作為常量。

iota

iota是一個(gè)常量生成器,它可以用來初始化相似規(guī)則的常量,避免重復(fù)的初始化。iota的初始值是0,它的能力是在每一個(gè)有常量聲明的行后面+1。

 const (
     one = iota + 1
     two 
     three 
     four
 )
image.gif

字符串和類型轉(zhuǎn)換

字符串是Go語言中常用的類型。

Go語言是強(qiáng)類型的語言,也就是說不同類型的變量是無法相互使用和計(jì)算的,也是為了保證Go程序的健壯性,所以不同類型的變量在進(jìn)行賦值或計(jì)算前,需要先進(jìn)行類型轉(zhuǎn)換。

 i2s := strconv.Itoa(i)   // alphabet  字母
 s2i, err := strconv.Atoi(i)
 fmt.Println(i2s, s2i, err)
image.gif

通過strconv包Itoa函數(shù)可以把一個(gè)int類型轉(zhuǎn)換為string,Atoi函數(shù)可以把string轉(zhuǎn)換為int。同理,對于浮點(diǎn)數(shù)、布爾型,Go語言提供了strconv.ParseFloat、strconv.ParseBool、strconv.FormatFloat和strconv.FormatBool進(jìn)行轉(zhuǎn)換。

對于數(shù)字類型之間,可以通過強(qiáng)制轉(zhuǎn)換的方式。采用強(qiáng)制轉(zhuǎn)換的方式轉(zhuǎn)換數(shù)字類型,可能會(huì)丟失一些精度,比如浮點(diǎn)數(shù)轉(zhuǎn)整型時(shí),小數(shù)點(diǎn)部分會(huì)全部丟棄。

把變量轉(zhuǎn)換為對應(yīng)的類型后,就可以對相同類型的變量進(jìn)行各種表達(dá)式運(yùn)算和賦值了。

Strings 包

講到基礎(chǔ)類型,尤其是字符串,不得不提Go SDK為我們提供的一個(gè)標(biāo)準(zhǔn)包Strings。它是用于處理字符串的工具包,里面有很多常用的函數(shù),幫助我們對字符串進(jìn)行操作。比如查找字符串、去除字符串的空格、拆分字符串、判斷字符串是否有某個(gè)前綴或者后綴等。掌握好它,有利于我們高效編程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 3. Go 數(shù)據(jù)類型及數(shù)據(jù)結(jié)構(gòu) 前面的幾節(jié)中有意無意地創(chuàng)建了很多變量,在變量聲明過程中,除非聲明過程就初始化,否則...
    PRE_ZHY閱讀 746評論 0 2
  • 在 Go 編程語言中,數(shù)據(jù)類型用于聲明函數(shù)和變量。數(shù)據(jù)類型的出現(xiàn)是為了把數(shù)據(jù)分成所需內(nèi)存大小不同的數(shù)據(jù),編程的時(shí)候...
    木蝴蝶蘇木閱讀 277評論 0 1
  • 每一門語言都有自己的數(shù)據(jù)結(jié)構(gòu),Go 語言也不例外,總共有四大類,基礎(chǔ)類型、聚合類型、引用類型和接口類型。本文簡單介...
    rayjun閱讀 998評論 0 2
  • 1 數(shù)據(jù)類型 1.1 按類別 布爾型:只可以是常量 true 或者 false。 數(shù)字類型:整型和浮點(diǎn)型。 位的運(yùn)...
    泥人冷風(fēng)閱讀 274評論 0 1
  • 1 .go有兩種數(shù)據(jù)類型,一種是語言內(nèi)置的數(shù)據(jù)類型,一種是通過語言提供的自定義數(shù)據(jù)類型方法自己定義的自定義數(shù)據(jù)類型...
    skoll閱讀 313評論 0 1

友情鏈接更多精彩內(nèi)容