go語言的數值型別分為以下幾種:整數、浮點數、複數,其中每一種都包含了不同大小的數值型別,例如有符號整數包含 int8、int16、int32、int64 等,每種數值型別都決定了對應的大小範圍和是否支援正負符號。本節我們主要介紹一下整數型別。
go語言同時提供了有符號和無符號的整數型別,其中包括 int8、int16、int32 和 int64 四種大小截然不同的有符號整數型別,分別對應 8、16、32、64 bit(二進位制位)大小的有符號整數,與此對應的是 uint8、uint16、uint32 和 uint64 四種無符號整數型別。
此外還有兩種整數型別 int 和 uint,它們分別對應特定 cpu 平台的字長(機器字大小),其中 int 表示有符號整數,應用最為廣泛,uint 表示無符號整數。實際開發中由於編譯器和計算機硬體的不同,int 和 uint 所能表示的整數大小會在 32bit 或 64bit 之間變化。
大多數情況下,我們只需要 int 一種整型即可,它可以用於迴圈計數器(for 迴圈中控制迴圈次數的變數)、陣列和切片的索引,以及任何通用目的的整型運算子,通常 int 型別的處理速度也是最快的。
用來表示 unicode 字元的 rune 型別和 int32 型別是等價的,通常用於表示乙個 unicode 碼點。這兩個名稱可以互換使用。同樣,byte 和 uint8 也是等價型別,byte 型別一般用於強調數值是乙個原始的資料而不是乙個小的整數。
最後,還有一種無符號的整數型別 uintptr,它沒有指定具體的 bit 大小但是足以容納指標。uintptr 型別只有在底層程式設計時才需要,特別是go語言和c語言函式庫或作業系統介面相互動的地方。
儘管在某些特定的執行環境下 int、uint 和 uintptr 的大小可能相等,但是它們依然是不同的型別,比如 int 和 int32,雖然 int 型別的大小也可能是 32 bit,但是在需要把 int 型別當做 int32 型別使用的時候必須顯示的對型別進行轉換,反之亦然。
go語言中有符號整數採用 2 的補碼形式表示,也就是最高 bit 位用來表示符號位,乙個 n-bit 的有符號數的取值範圍是從 -2(n-1) 到 2(n-1)-1。無符號整數的所有 bit 位都用於表示非負數,取值範圍是 0 到 2n-1。例如,int8 型別整數的取值範圍是從 -128 到 127,而 uint8 型別整數的取值範圍是從 0 到 255。
哪些情況下使用 int 和 uint
程式邏輯對整型範圍沒有特殊需求。例如,物件的長度使用內建 len() 函式返回,這個長度可以根據不同平台的位元組長度進行變化。實際使用中,切片或 map 的元素數量等都可以用 int 來表示。
反之,在二進位制傳輸、讀寫檔案的結構描述時,為了保持檔案的結構不會受到不同編譯目標平台位元組長度的影響,不要使用 int 和 uint。
26 Go語言標準庫之檔案操作
os.open 函式能夠開啟乙個檔案,返回乙個 file和乙個err。對得到的檔案例項呼叫close 方法能夠關閉檔案。package main import fmt os func main 關閉檔案 file.close 為了防止檔案忘記關閉,我們通常使用defer註冊檔案關閉語句。read方法...
Go整數型別
型別 有無符號 占用儲存空間 表示範圍 備註int8 有符號1位元組 2 7 2 7 1 127 128 int16 有符號2位元組 2 15 2 15 1 int32 有符號4位元組 2 31 2 31 1 int64 有符號8位元組 2 63 2 63 1 uint8 無符號1位元組 0 2 8...
go 函式 作為型別 go語言
在go語言中國 可以把 函式作為一種型別 用 type 定義。利用這種特性 可以進行型別轉換。可以用作函式引數的 型別 來約束引數。型別轉換的基本格式如下 type name expression package main import fmt 宣告乙個函式型別 type calculatetype...