第三章 整形
golang數值型別包括:整形數,浮點數,複數。(不同大小,是否支援正負都是不同型別)
整形
包括有符號的整形 int8 int16 int32 int64以及對應的無符號整形數 uint8 uint16 uint32 uint64 這裡面的數字 8,16,32,64對應的是計算機位數 。
這裡對應有特定平臺的有符號int型與無符號uint型 這兩種型別是根據CPU的處理位數來確定對應大小的
uintptr沒有指定大小,但是可以容納指標。
有符號整形 以最高位代表符號位,超出會導致值為相反符號數 例如int8 127+1 = -128
在golang中取模運算%的符號總是和被取模數的符號一致 例如: -5%3 與-5%-3 的結果都是-2
除法運算子 / 的行為依賴於運算元是否全為證書,例如 5/4 結果為1 截斷餘數5.0/4.0 結果為 1.25 (5.0/4) = (5/4.0) = 1.25
golang 提供位運算子ofollow,noindex">位運算說明
- &位運算 AND
- |位運算OR
- ^位運算 XOR
- &^位清空 AND NOT
- << 左移
-
>> 右移
len函式返回的是有符號整形int值
兩種型別的整形數是無法進行直接算數運算的,需要轉型之後才可以計算,哪怕相同長度型別的整形也需要。轉換最簡單的用法 int(XXX)浮點型轉換為整形會丟失小數點後的精度。
在golang中NAN與NAN做 比較 結果為 flase;
字串
一個字串是一個不可改變的序列;嘗試修改字串的部分會報錯。
常用的字串處理包
bytes,strings,strconv,unicode.
- bytes包提供類似字串的查詢、替換、比較、截斷、拆分和合並功能。
- strings包與byte包類似只不過byte包針對[]byte型別,因為字串都是隻讀的,因此逐步構建字串會導致很多的分配和複製,這時候bytes包中的byte.Buffer型別會更有效與操作。
- strconv 包提供的型別轉換 相關函式
- unicode包提供字串自身轉換 相關的函式,如:IsDigit、IsLetter、IsUpper、IsLower、ToUpper、ToLower等操作函式。
- path 和 path、filepath包 提供了關於檔案路徑名更一般的函式操作。
strings包中6個常用函式:
func Contains(s,substr string) bool 判斷是否是子串
func Count(s,sep string) int 字串中子串出現的次數
func Fields(s string) [] string 字串分隔為切片
func HasPrefix(s,prefix string)bool 判斷是否以……開頭
func Index(s,sep string) int 返回子串第一次出現的位置
func Join(a []string sep string) string 切片轉換為字串
常量
常量表達式的值在編譯期計算,而不是在執行期,每種常量的潛在型別都是基礎型別:布林,string或者數字
iota常量生成器常量自增
無型別常量編譯器為這些沒有明確的基礎型別的數字常量提供比基礎型別更高精度的算術運算,至少256位運算。
六種未明確型別的常量型別如下:
- 無型別布林型 、無型別的整數、無型別的字元、無型別的浮點數、無型別的複數、無型別的字串