Go中數(shù)值類(lèi)型有3種:1、整數(shù)類(lèi)型,可分為平臺(tái)無(wú)關(guān)整型及平臺(tái)相關(guān)整型,區(qū)別是在不同CPU架構(gòu)或操作系統(tǒng)下長(zhǎng)度是否是一致的。2、浮點(diǎn)類(lèi)型,可分為float32與float64兩種,分別對(duì)應(yīng)IEEE754中的單精度與雙精度浮點(diǎn)數(shù)值類(lèi)型。3、復(fù)數(shù),可分為complex128(64位實(shí)數(shù)和虛數(shù))和 complex64(32位實(shí)數(shù)和虛數(shù))兩種,其中complex128為復(fù)數(shù)的默認(rèn)類(lèi)型。
本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。
Go語(yǔ)言體系中的基本數(shù)據(jù)類(lèi)型總來(lái)的來(lái)說(shuō)包括數(shù)值類(lèi)型與字符串類(lèi)型。
而數(shù)值類(lèi)型又可分為以下幾種:整數(shù)、浮點(diǎn)數(shù)、復(fù)數(shù),其中每一種都包含了不同大小的數(shù)值類(lèi)型,例如有符號(hào)整數(shù)包含 int8、int16、int32、int64 等,每種數(shù)值類(lèi)型都決定了對(duì)應(yīng)的大小范圍和是否支持正負(fù)符號(hào)。
Go語(yǔ)言整型(整數(shù)類(lèi)型)
在Go語(yǔ)言中整型分為平臺(tái)無(wú)關(guān)整型及平臺(tái)相關(guān)整型,區(qū)別主要就在,這些整數(shù)類(lèi)型在不同CPU 架構(gòu)或操作系統(tǒng)下面,它們的長(zhǎng)度是否是一致的。
平臺(tái)無(wú)關(guān)整型
而無(wú)關(guān)整型又區(qū)分了有符號(hào)整型和無(wú)符號(hào)整型,其表示的數(shù)據(jù)范圍是不一樣的。
平臺(tái)相關(guān)整型
Go原生提供了三個(gè)平臺(tái)相關(guān)整型,分別是int、uint 與 uintptr。
特別注意:在編寫(xiě)有移植性要求的代碼時(shí),千萬(wàn)不要強(qiáng)依賴(lài)這些類(lèi)型的長(zhǎng)度。
可以通過(guò) unsafe 包提供的 SizeOf 函數(shù)來(lái)獲取三個(gè)整型在平臺(tái)上的長(zhǎng)度。
func main() { var a, b = int(5), uint(6) var p uintptr = 0x12345678 fmt.Println("signed integer a's length is", unsafe.Sizeof(a)) fmt.Println("unsigned integer b's length is", unsafe.Sizeof(b)) fmt.Println("uintptr's length is", unsafe.Sizeof(p)) } // 打印輸出 signed integer a's length is 8 unsigned integer b's length is 8 uintptr's length is 8
格式化輸出
go提供了標(biāo)準(zhǔn)庫(kù)fmt包可以格式化輸出不同進(jìn)制的形式。
func main() { var a int8 = 66 fmt.Printf("%bn", a) //輸出二進(jìn)制:1000010 fmt.Printf("%dn", a) //輸出十進(jìn)制:66 fmt.Printf("%on", a) //輸出八進(jìn)制:102 fmt.Printf("%On", a) //輸出八進(jìn)制(帶0o前綴):0o102 fmt.Printf("%xn", a) //輸出十六進(jìn)制(小寫(xiě)):42 fmt.Printf("%Xn", a) //輸出十六進(jìn)制(大寫(xiě)):42 }
Go語(yǔ)言浮點(diǎn)類(lèi)型(小數(shù)類(lèi)型)
Go語(yǔ)言提供了float32與float64 兩種浮點(diǎn)類(lèi)型,它們分別對(duì)應(yīng)的就是IEEE754中的單精度與雙精度浮點(diǎn)數(shù)值類(lèi)型, 這基本上對(duì)應(yīng)于Java中的float和double類(lèi)型。
Go語(yǔ)言對(duì)浮點(diǎn)類(lèi)型的表示提供了兩種方式, 十進(jìn)制類(lèi)型及科學(xué)計(jì)數(shù)法; 而其中科學(xué)計(jì)數(shù)法又分為十進(jìn)制和十六進(jìn)制兩種表示方法。
3.1415 .15 // 整數(shù)部分如果為0,整數(shù)部分可以省略不寫(xiě) 81.80 82. // 小數(shù)部分如果為0,小數(shù)點(diǎn)后的0可以省略不寫(xiě)
十進(jìn)制表示法: 6674.28e-2 // 6674.28 * 10^(-2) = 66.742800 .12345E+5 // 0.12345 * 10^5 = 12345.000000 十六進(jìn)制表示法: 0x2.p10 // 2.0 * 2^10 = 2048.000000 0x1.Fp+0 // 1.9375 * 2^0 = 1.937500
var f float64 = 112.676899 // 浮點(diǎn)類(lèi)型第一種:十進(jìn)制表示法 fmt.Printf("%fn", f) // 112.676899 // 浮點(diǎn)類(lèi)型第二種:科學(xué)計(jì)數(shù)法--十進(jìn)制表示法 fmt.Printf("%en", f) // 1.126769e+02 // 浮點(diǎn)類(lèi)型第二種:科學(xué)計(jì)數(shù)法--十六進(jìn)制表示法 fmt.Printf("%xn", f) // 0x1.c2b52502eec7dp+06
Go 提供兩種復(fù)數(shù)類(lèi)型,它們分別是 complex64 和 complex128,complex64 的實(shí)部與虛部都是 float32 類(lèi)型,而 complex128 的實(shí)部與虛部都是 float64 類(lèi)型。如果一個(gè)復(fù)數(shù)沒(méi)有顯示賦予類(lèi)型,那么它的默認(rèn)類(lèi)型為 complex128。
Go提供了三種表示方法:
1、使用復(fù)數(shù)字面值直接初始化一個(gè)復(fù)數(shù)類(lèi)型變量
var c = 5 + 7i var d = 0o123 + .12345E+5i // 83+12345i
2、使用Go提供的complex函數(shù),創(chuàng)建一個(gè)complex128類(lèi)型值
var c = complex(5, 6) // 5 + 6i var d = complex(0o123, .12345E+5) // 83+12345i
3、使用Go提供的預(yù)定義的函數(shù)real和imag,可以獲取一個(gè)復(fù)數(shù)的實(shí)部與虛部,返回值為一個(gè)浮點(diǎn)類(lèi)型
var c = complex(5, 6) // 5 + 6i r := real(c) // 5.000000 i := imag(c) // 6.000000
擴(kuò)展知識(shí):自定義數(shù)值類(lèi)型
可以通過(guò)Go語(yǔ)言提供的type關(guān)鍵字基于原生數(shù)值類(lèi)型來(lái)聲明一個(gè)新類(lèi)型。
比如,
type NewInt int32
NewInt是我們新定義的類(lèi)型,底層是int32類(lèi)型,但是和原生類(lèi)型int32卻是兩種類(lèi)型,無(wú)法直接進(jìn)行賦值,需要進(jìn)行顯示轉(zhuǎn)換才可以。
type NewInt int32 var m int = 5 var n int32 = 6 var a NewInt = NewInt(m) // ok var b NewInt = NewInt(n) // ok
當(dāng)然如果想要能夠直接與原生類(lèi)型直接賦值使用,Go提供了類(lèi)型別名(Type Alias)語(yǔ)法來(lái)自定義數(shù)值類(lèi)型。
type NewInt = int32 var m int32 = 5 var n NewInt = m
Go 的原生數(shù)值類(lèi)型有三類(lèi):整型、浮點(diǎn)型和復(fù)數(shù)型, 通過(guò)上面的簡(jiǎn)單介紹我們可以知道Go與大多數(shù)主流語(yǔ)言基本查不多,當(dāng)然Go也有不一樣的, 比如其原生支持復(fù)數(shù)類(lèi)型。
【