本章主要介紹Go語言的數據類型
布爾(bool)
布爾指對或者錯,也就是說bool只有兩個值, True 或 False
兩個類型相同的值可以使用比較運算符來得出一個布爾值
當兩個值是完全相同的情況下會返回 True,否則返回 False。
package main var suma int = 11 var sumb int = 11 func main() { print(suma == sumb) }
上方的代碼返回 true
如果值不相同返回 false
如果變量類型不一樣會報錯
package main var suma int = 11 var sumb int8 = 12 func main() { print(suma == sumb) }
invalid operation: suma == sumb (mismatched types int and int8)
邏 輯 值 可 以 被 用 於 條 件 結 構 中 的 條 件 語 句, 以 便 測 試 某 個 條 件 是 否 滿 足。 另 外, 和 &&、 或 | | 與 相 等 = = 或 不 等 != 屬 於 二 元 運 算 符, 而 非 ! 屬 於 一 元 運 算 符。
!運算符指的是非運算符,非 運 算 符 用 於 取 得 和 布 爾 值 相 反 的 結 果。
當!后的值為 true 時會反轉成 false
false 時同理
package main var aVar int = 10 func main() { print(!(aVar != 5)) }
返回 false
和運算符 &&
只有當兩邊都為 true 時才是 true
package main var aVar int = 10 func main() { print(aVar != 5 && aVar !=10) }
結果為 false
或運算符 ||
只有當兩邊值都為 false 時才是 false
package main var aVar int = 10 func main() { print(aVar != 5 || aVar !=10) }
結果為 true
對 於 布 爾 值 的 好 的 命 名 能 夠 很 好 地 提 升 代 碼 的 可 讀 性, 例 如 以 is 或 者 Is 開 頭 的 isSorted、 isFinished、 isVisivle, 使 用 這 樣 的 命 名 能 夠 在 閱 讀 代 碼 的 獲 得 閱 讀 正 常 語 句 一 樣 的 良 好 體 驗, 例 如 標 准 庫 中 的 unicode.IsDigit( ch)
數字類型
數字類型大體可分為整形 int 和浮點型 float
需要注意的是,int和unit和unitptr長度是由程序所在的操作系統決定的
如果在32位操作系統,int和unit占32位(4字節)
64位則占64位(8字節)
uintptr 長度為足夠存放一個指針
# 目前機器基本為64位
整數有多種類型,每種類型對應不同的長度
關鍵字 | 支持的大小 |
int | 隨操作系統變化 |
int8 | -128 -- 127 |
int16 | -32768 -- 32767 |
int32 | -2147483648 -- 2147483647 |
int64 | -9223372036854775808 -- 9223372036854775807 |
uint | 隨操作系統變化 |
uint8 | 0 -- 255 |
uint16 | 0 -- 65535 |
uint32 | 0 -- 4294967295 |
uint64 | 0 -- 18446744073709551615 |
uint 和 int 區別就是uint不支持復數
在 Go 語言中沒有 float 類型,只有 float32 和 float64
關鍵字 | 支持的大小 |
float32 | +- 1e-45 -> +- 3.4 * 1e38 |
float64 | +- 5 * 1e-324 -> 107 * 1e308 |
你需要知道的是
int是計算最快的一種類型
如果是對數字有要求的變量盡量規定長度
整形的初始值(零值為0),浮點數的零值為(0.0)
float32精確到小數點后7位,float64精確到后15位
如果你使用到 math 包,那么盡可能使用 float64,因為 math 中關於數學運算的函數都要求接收此類型
如果涉及到類型之間的轉換使用 轉換后的類型(原變量) 的方式
如果將大范圍數字轉換為小范圍類型時會丟失精度
進制
你 可 以 通 過 增 加 前 綴 0 來 表 示 8 進 制 數( 如: 077),
增 加 前 綴 0x 來 表 示 16 進 制 數( 如: 0xFF),
以 及 使 用 e 來 表 示 10 的 連 乘( 如: 1e3 = 1000, 或 者 6.022e23 = 6.022 x 1e23)。
格式化輸出
在 格 式 化 字 符 串 里,% d 用 於 格 式 化 整 數(% x 和 %X 用 於 格 式 化 16 進 制 表 示 的 數 字),
% g 用 於 格 式 化 浮 點 型(% f 輸 出 浮 點 數,% e 輸 出 科 學 計 數 表 示法),
% 0d 用 於 規 定 輸 出 定 長 的 整 數, 其 中 開 頭 的 數 字 0 是 必 須 的。
%n.mg 用 於 表 示 數 字 n 並 精 確 到 小 數 點 后 m 位, 除 了 使 用 g 之 外, 還 可 以 使 用 e 或 者 f,
例 如: 使 用 格 式 化 字 符 串 %5.2e 來 輸 出 3.4 的 結 果 為 3.40e + 00。