golang學習筆記4:基本類型和運算符

布爾類型 bool

布爾型的值只可以是常量 true 或者 false。一個簡單的例子: var b bool = true 。兩個類型相同的值可以使用相等 == 或者不等 != 運算符來進行比較並獲得一個布爾型的值。當相等運算符兩邊的值是完全相同的值的時候會返回 true,否則返回 false,並且只有在兩個的值的類型相同的情況下纔可以使用。

布爾型的常量和變量也可以通過和邏輯運算符(非 ! 、和 && 、或 || )結合來產生另外一個布爾值,這樣的邏輯語句就其本身而言,並不是一個完整的 Go 語句。

整型 int 和浮點型 float

Go 語言支持整型和浮點型數字,並且原生支持複數,其中位的運算採用補碼。 Go 也有基於架構的類型,例如:int、uint 和 uintptr。 這些類型的長度都是根據運行程序所在的操作系統類型所決定的: int 和 uint 在 32 位操作系統上,它們均使用 32 位(4 個字節),在 64 位操作系統上,它們均使用 64 位(8 個字節)。 uintptr 的長度被設定爲足夠存放一個指針即可。 Go 語言中沒有 float 類型。 與操作系統架構無關的類型都有固定的大小,並在類型的名稱中就可以看出來: 整數: int8(-128 -> 127) int16(-32768 -> 32767) int32(-2,147,483,648 -> 2,147,483,647) int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807) 無符號整數: uint8(0 -> 255) uint16(0 -> 65,535) uint32(0 -> 4,294,967,295) uint64(0 -> 18,446,744,073,709,551,615) 浮點型(IEEE-754 標準): float32(+- 1e-45 -> +- 3.4 * 1e38) float64(+- 5 1e-324 -> 107 1e308) int 型是計算最快的一種類型。

字符類型

嚴格來說,這並不是 Go 語言的一個類型,字符只是整數的特殊用例。 byte 類型是 uint8 的別名,對於只佔用 1 個字節的傳統 ASCII 編碼的字符來說,完全沒有問題。例如: var ch byte = 'A' ;字符使用單引號括起來。

在 ASCII 碼錶中,A 的值是 65,而使用 16 進製表示則爲 41,所以下面的寫法是等效的:var ch byte = 65 或 var ch byte = '\x41'( \x 總是緊跟着長度爲 2 的 16 進制數)

另外一種可能的寫法是 \ 後面緊跟着長度爲 3 的八進制數,例如: \377 。

不過 Go 同樣支持 Unicode(UTF-8),因此字符同樣稱爲 Unicode 代碼點或者 runes,並在內存中使用 int來表示。在文檔中,一般使用格式 U+hhhh 來表示,其中 h 表示一個 16 進制數。其實 rune 也是 Go 當中的一個類型,並且是 int32 的別名。

在書寫 Unicode 字符時,需要在 16 進制數之前加上前綴 \u 或者 \U 。 因爲 Unicode 至少佔用 2 個字節,所以我們使用 int16 或者 int 類型來表示。如果需要使用到 4 字節,則會加上 \U 前綴;前綴 \u 則總是緊跟着長度爲 4 的 16 進制數,前綴 \U 緊跟着長度爲 8 的16 進制數。

var ch int = '\u0041'

var ch2 int = '\u03B2'

var ch3 int = '\U00101234'

fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer

fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character

fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes

fmt.Printf("%U - %U - %U", ch, ch2, ch3) // UTF-8 code point

輸出:

1. 65 - 946 - 1053236

2. A - β - r

3. 41 - 3B2 - 101234

4. U+0041 - U+03B2 - U+101234

格式化說明符 %c 用於表示字符;當和字符配合使用時, %v 或 %d 會輸出用於表示該字符的整數; %U輸出格式爲 U+hhhh 的字符串。 包 unicode 包含了一些針對測試字符的非常有用的函數(其中 ch 代表字符): 判斷是否爲字母: unicode.IsLetter(ch) 判斷是否爲數字: unicode.IsDigit(ch) 判斷是否爲空白符號: unicode.IsSpace(ch) 這些函數返回一個布爾值。

運算符與優先級

有些運算符擁有較高的優先級,二元運算符的運算方向均是從左至右。下表列出了所有運算符以及它們的優先級,由上至下代表優先級由高到低:

7 ^ ! 6 * / % << >> & &^ 5 + - | ^ 4 == != < <= >= > 3 <- 2 && 1 ||

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章