數字類型固然是用來表示數字的,分爲整型和浮點型。編程
整型用來存儲整數,Go有幾種不一樣大小的內置整數類型,用於存儲有符號和無符號整數。數組
int
類型的大小取決於機器,在32位機器上是32 bits,在64位機器上則是64 bits。
uint
的大小也取決於機器。
使用整數值時,除非有充分的理由必須使用符合大小的無符號整數類型,不然應始終使用
int
數據類型。函數
舉個🌰:學習
medals := []string{"gold", "silver", "bronze"}
for i := len(medals) - 1; i >= 0; i-- {
fmt.Println(medals[i]) // "bronze", "silver", "gold"
}
複製代碼
程序的意思一眼就能看懂:循環輸出數組的元素。 看下,程序有沒有問題?若是len
函數返回一個無符號數,那麼i
也將是無符號的uint
類型,而後條件i >= 0
則永遠爲真。在三次迭代以後,也就是i == 0
時,i--
語句將不會產生-1
,而是變成一個uint
類型的最大值(多是 - 1),而後medals[i]
表達式運行時將發生訪問異常。ui
var myInt8 int8 = 97
// 變量不聲明類型,系統默認 int類型
var myInt = 1200
var myUint uint = 500
var myHexNumber = 0xFF // '0x' or '0X' 前綴 表示16進制數
var myOctalNumber = 034 // '0' 前綴表示8進制數
fmt.Printf("%T\n",myInt) // %T 輸出變量類型
fmt.Printf("%d, %d, %d, %#x, %#o\n", myInt8, myInt, myUint, myHexNumber, myOctalNumber)
// %後的 # 副詞告訴Printf在用%o、%x或%X輸出時生成0、0x或0X前綴。
複製代碼
輸出: 編碼
還有一種無符號的整數類型uintptr
,沒有指定具體的bit大小可是足以容納指針。
uintptr
類型只有在底層編程時才須要,特別是Go語言和C語言函數庫或操做系統接口相交互的地方,咱們之後再講它的用法。
Golang還有另外兩種整數類型:byte
和rune
,它們分別是uint8
和int32
的別名: spa
char
字符類型,
byte
和
rune
用於強調字符而不是整型值。
byte
用來表示
ASCII
字符,
rune
表示以UTF-8格式編碼的Unicode碼點。 字符在Go中怎麼表示呢?用單引號括起來,例如:
'A'
字符默認的類型是
rune
,因此,若是在聲明一個字符變量時沒有指明類型,Go編譯器會默認是
rune
:
var myByte = 'A'
fmt.Printf("%T\n",myByte)
複製代碼
輸出:int32,rune
是int32
的別名嘛,因此輸出int32
。 那咱們就直接使用byte
指明變量的類型:操作系統
var lastLetter byte = 'Z'
複製代碼
byte
和rune
實質上都是整數,例如,byte
類型的'A'
能夠轉成整型值97;相似的,rune
類型的Unicode字符'♥'
能夠轉成對應的Unicode碼點U+2665
(U+
用來表示unicode
,2665
是十六進制數值),實質上也是整型。.net
var myByte byte = 'a'
var myRune rune = '♥'
fmt.Printf("%c = %d and %c = %U\n", myByte, myByte, myRune, myRune)
複製代碼
輸出:a = 97 and ♥ = U+2665
上面的例子中,輸出的是byte
變量myByte
和對應的十進制數字、rune
變量myRune
和對應的Unicode碼。3d
浮點數用戶存儲帶小數點的數字,Go有兩種浮點數float32
和float64
。
float32
,32位,單精度;float64
,64位,雙精度;默認的浮點型是float64
,因此,但你初始化一個浮點型的變量而沒有指明是哪一種浮點類型時,編譯器默認是float64
。
var a = 9715.635 //默認float64
複製代碼
Go的類型系統很是強大,不容許你在表達式中將數字類型混淆。例如,不容許int
和float64
類型執行相加操做,甚至連int
和int64
之間也不能:
var a int64 = 4
var b int = a // 編譯出錯 (Cannot use a (type in64) as type int in assignment)
var c int = 500
var result = a + c // 編譯出錯 (Invalid Operation: mismatched types int64 and int)
複製代碼
與其餘靜態類型語言(如C,C ++和Java)不一樣,Go是不提供任何隱式類型轉換的。好了,若是你非要在不一樣類型的數字之間執行相似相加、相減等操做,怎麼辦?類型轉換,轉換成你須要的類型,語法是這樣的: T(v)
,T
就是目標類型,v
是想轉的值:
var a int64 = 4
var b int = int(a) // 顯式類型轉換
var c float64 = 6.5
// 顯式類型轉換
var result = float64(b) + c // Works
複製代碼
輸出:10.5
原創文章,若需轉載請註明出處!
歡迎掃碼關注公衆號「Golang來啦」或者移步 seekload.net ,查看更多精彩文章。
公衆號「Golang來啦」給你準備了一份神祕學習大禮包,後臺回覆【電子書】領取!