有符號和無符號整數:8位,16位,32位,64位:int8、int16、int32、int64、uint8、uint16、uint32、uint64
浮點數:float32和float64
字串:內建的len函式返回字串的位元組數,試圖訪問許可範圍以外的位元組會觸發宕機異常。
s := "left foot"
t := s
s +=", right foor"
s[0] = 'l' //編譯錯誤,s[0]無法賦值
字串s不可變意味著兩個字串能安全地共用同一段底層記憶體,使得複製任何長度字串的開銷都低廉。類似地,字串s及其字串可以安全地共用資料,因此字串生成操作都開銷都低廉。這兩種情況下都沒有分配記憶體。圖3-4展示了乙個字串及其兩個子字串的記憶體布局,他們共用底層位元組陣列。
go 語言的字串是不可變的。
修改字串時,可以將字串轉換為 byte 進行修改。
byte 和 string 可以通過強制型別轉換互轉。
package main
import "fmt"
func main()
字串常量:"hello,世界"
字串操作的4個重要標準包:
strings包提供了許多函式,用於搜尋,替換、比較、修正、切分與連線字串。
bytes包也有類似的函式,用於操作位元組slice。由於字串不可變,因此按增量的方式構建字串會導致多次記憶體分配和複製。這種情況下,使用bytes.buffer型別會更高效。
strconv包具備的函式,主要用於轉換布林值、整數、浮點數等。
unicode包辨別文字元號特性的函式。如isdigit等。
s := "abc"
b := byte(s)
s2 := string(b)
概念上,byte(s)轉換操作會分配新的位元組陣列,拷貝填入s含有的位元組,並生成乙個slice引用,指向整個陣列。具備優化功能的編譯器在某些情況下可能會避免記憶體和複製內容,但一般而言,複製有必要確保s的位元組維持不變。
可用bytes包和strings包。
package main
import (
"bytes"
"fmt"
)func intstostring(values int) string
fmt.fprintf(&buf,"%d",v)
} buf.writebyte(']')
return buf.string()
}func main()))
}
strconv包的函式可以相互轉換數值及其字串表示形式。
常量生成器:iota
常量宣告可以使用iota,宣告中,iota從0開始取值,逐漸加1
type weekday int
const(
sunday weekday = iota
monday
tuesday
wednesday
thursday
friday
saturday
)
sun的值為0,monday的值為1,以此類推。 第三章讀書筆記
程序管理 3.1程序 程序就是處於執行期的程式 目標碼存放在某種儲存介質上 但程序並不僅僅侷限於一段可執行程式 執行執行緒,執行緒,是程序活動的物件。兩種虛擬機制 虛擬處理器和虛擬記憶體。最終,程式通過exit 系統呼叫退出執行。3.2程序描述及任務結構 核心把程序的列表存放在叫做任務佇列的雙向迴圈...
第三章讀書筆記
本章是講了git的使用入門,為學習本書的人展示了git的基本用法。儘管git並不是學習android移植和linux核心 驅動開發必須掌握的技術。但對於深入研究這些底層技術的人來說,git將成為學習過程中必不可少的工具。git是什麼,git就是乙個開源的分布式版本控制系統,用以有效 高速的處理從很小...
UNP讀書筆記第三章
網路位元組序和主機位元組序大小端不一樣。linux提供了4個轉換函式 include uint16 t htons uint16 t value uint32 t htonl uint 32t value uint16 t ntohs uin16 t value uint32 t ntohl uin...