Go程式語言讀書筆記 第三章

2021-09-14 05:35:26 字數 1721 閱讀 7614

有符號和無符號整數: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...