Go資料型別

2021-10-05 20:11:16 字數 3503 閱讀 3693

go 語言按類別有以下幾種資料型別:

序號型別和描述

布林型布林型的值只可以是常量 true 或者 false。乙個簡單的例子:var b bool = true。

數值型別

整型 int 和浮點型 float,go 語言支援整型和浮點型數字,並且原生支援複數,其中位的運算採用補碼。

字串型別:

字串就是一串固定長度的字元連線起來的字串行。go的字串是由單個位元組連線起來的。go語言的字串的位元組使用utf-8編碼標識unicode文字。

派生型別:

包括:(a) 指標型別(pointer)

(b) 陣列型別

(c) 結構化型別(struct)

(d) 聯合體型別 (union)

(e) 函式型別

(f) 切片型別

(g) 介面型別(inte***ce)

(h) map 型別

(i) channel 型別

go語言的數值型別分為以下幾種:整數、浮點數、複數,其中每一種都包含了不同大小的數值型別,例如有符號整數包含 int8、int16、int32、int64 等,每種數值型別都決定了對應的大小範圍和是否支援正負符號

整數型別:

序號型別和描述

uint8

無符號 8 位整型 (0 到 255)

uint16

無符號 16 位整型 (0 到 65535)

uint32

無符號 32 位整型 (0 到 4294967295)

uint64

無符號 64 位整型 (0 到 18446744073709551615)

int8

有符號 8 位整型 (-128 到 127)

int16

有符號 16 位整型 (-32768 到 32767)

int32

有符號 32 位整型 (-2147483648 到 2147483647)

int64

有符號 64 位整型 (-9223372036854775808 到 9223372036854775807)

go語言同時提供了有符號和無符號的整數型別,其中包括 int8、int16、int32 和 int64 四種大小截然不同的有符號整數型別,分別對應 8、16、32、64 bit(二進位制位)大小的有符號整數,與此對應的是 uint8、uint16、uint32 和 uint64 四種無符號整數型別。

浮點型:

序號型別和描述

float32

ieee-754 32位浮點型數

float64

ieee-754 64位浮點型數

complex64

32 位實數和虛數

complex128

64 位實數和虛數

go語言浮點型別(小數型別)

go語言提供了兩種精度的浮點數 float32 和 float64,它們的算術規範由 ieee754 浮點數國際標準定義,該浮點數規範被所有現代的 cpu 支援。

這些浮點數型別的取值範圍可以從很微小到很巨大。浮點數取值範圍的極限值可以在 math 包中找到:

乙個 float32 型別的浮點數可以提供大約 6 個十進位制數的精度,而 float64 則可以提供約 15 個十進位制數的精度,通常應該優先使用 float64 型別,因為 float32 型別的累計計算誤差很容易擴散,並且 float32 能精確表示的正整數並不是很大。

go語言複數

go語言中複數的型別有兩種,分別是  complex128(64 位實數和虛數)和 complex64(32 位實數和虛數),其中 complex128 為複數的預設型別。

複數的值由三部分組成 re + imi,其中 re 是實數部分,im 是虛數部分,re 和 im 均為 float 型別,而最後的 i 是虛數單位。

宣告複數的語法格式如下所示:

var name complex128 = complex(x, y)

其中 name 為複數的變數名,complex128 為複數的型別,「=」後面的 complex 為go語言的內建函式用於為複數賦值,x、y 分別表示構成該複數的兩個 float64 型別的數值,x 為實部,y 為虛部。

上面的宣告語句也可以簡寫為下面的形式:

name := complex(x, y)

對於乙個複數z := complex(x, y),可以通過go語言的內建函式real(z) 來獲得該複數的實部,也就是 x;通過imag(z) 獲得該複數的虛部,也就是 y。

其他數字型別序號

型別和描述

byte

uint8別名

rune

int32別名

uint

32 或 64 位

int與 uint 一樣大小

uintptr

無符號整型,用於存放乙個指標

go語言的字元有以下兩種:

此外還有兩種整數型別 int 和 uint,它們分別對應特定 cpu 平台的字長(機器字大小),其中 int 表示有符號整數,應用最為廣泛,uint 表示無符號整數。實際開發中由於編譯器和計算機硬體的不同,int 和 uint 所能表示的整數大小會在 32bit 或 64bit 之間變化。如果裝的系統是32位,則是int32;如果是64位則是int64,系統決定使用多少位來存放

大多數情況下,我們只需要 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。

程式邏輯對整型範圍沒有特殊需求。例如,物件的長度使用內建 len() 函式返回,這個長度可以根據不同平台的位元組長度進行變化。實際使用中,切片或 map 的元素數量等都可以用 int 來表示。

反之,在二進位制傳輸、讀寫檔案的結構描述時,為了保持檔案的結構不會受到不同編譯目標平台位元組長度的影響,不要使用 int 和 uint。

go 資料型別

資料型別陣列 切片map struct 函式介面 channel 指標陣列 類似php索引陣列,長度固定,值型別唯一 func main 宣告並初始化陣列arr2,長度自動匹配 fmt.printf t arr1 fmt.printf t arr2 切片 動態陣列 func main 擷取 s3 s...

go資料型別

在 go 程式語言中,資料型別用於宣告函式和變數。資料型別的出現是為了把資料分成所需記憶體大小不同的資料,程式設計的時候需要用大資料的時候才需要申請大記憶體,就可以充分利用記憶體。go 語言按類別有以下幾種資料型別 序號型別和描述 1布林型 布林型的值只可以是常量 true 或者 false。乙個簡...

Go資料型別轉化

go是一種強型別語言,同時也屬靜態型別語言。強型別語言也稱為強型別定義語言,是一種總是強制型別定義的語言。也就是說一旦乙個變數被指定了某個資料型別,如果不經過強制轉化,那麼它就永遠是這個資料型別了。例如下面的 中,開始處變數str的型別是字串,接著又賦給變數str乙個int型別的值,這是不允許的。p...