golang 讀書筆記

2022-01-30 21:58:02 字數 3023 閱讀 5433

go語言是一種讓**分享更容易的程式語言。go語言自帶一些工具,讓使用別人寫的包更容易,並且分享自己寫的包更容易。

go語言對併發的支援是這門語言最重要的特性之一。goroutine很像執行緒,但是它占用的記憶體遠少於執行緒,使用它需要的**更少。通道(channel)是一種內建的資料結構,可以讓使用者在不同 的goroutine之間同步傳送具有型別的訊息。

goroutine是可以與其他goroutine並行執行的函式,同時也會與主程式(程式的入口)並行執行。

個人理解: 相當於其他語言的多執行緒

channel一種資料結構,可以讓goroutine之間進行安全的資料通訊。

可以避免像其他語言裡常見的共享記憶體訪問的問題。

鴨子型別如果它叫起來像鴨子,那它就可能是只鴨子

go語言的型別系統

型別簡單

go介面對一組行為建模

空白識別符號(_)用來拋棄不想繼續使用的值,如給匯入的包賦予乙個空名字,或者忽略函式返回的你不感興趣的值。

init函式每個包可以包含任意多個init函式,所有被編譯器發現的init函式都在main函式之前執行。

文件命令列獲取

go doc fmt

瀏覽文件

包含所有go標準庫和你的gopath下go源**的文件

函式的文件直接寫在函式宣告之前,使用人類可讀的句子編寫。如果想給包寫一段文字量比較大的文件,可以在工程裡包含乙個叫作doc.go的檔案,使用同樣的包名,並把包的介紹使用注釋加在包名宣告之前。

資料型別

引用型別 切片、map、channel(通道)、介面、函式, 當宣告上述型別的變數時,建立的變數被稱作 header 值

陣列固定長度。用於儲存一段具有相同的型別的元素的連續塊

如果使用...代替陣列長度,則更具初始化時陣列元素的數量來確定該陣列的長度

// 宣告乙個包含5個元素的整型陣列

var array [5]int

// 用具體值初始化每個元素

array := [5]int

// 容量由初始化值的數量決定

array := [...]int

// 用具體值初始化索引為1,2 的元素,其餘則保持0

array := [5]int

切片動態陣列,可以按需自動增長和縮小。

在64位架構機器上, 乙個切片需要24位元組的記憶體: 指標字段需要8位元組,長度和容量字段分別需要8位元組。

// 建立乙個字串切片,其長度和容量都是5個元素

slice := make(string, 5)

// 長度為3個元素,容量為5個元素 不容許建立容量小雨長度的切片

slice := make(int, 3, 5)

// 建立 nil 整型切片

var slice int

如果在運算子中指定了乙個值,那麼建立的就是陣列而不是切片

//建立有3個元素的整型陣列

array := [3]int

//建立長度和容量都是3的整型切片

slice := int

//建立乙個整型切片,其長度和容量都是5個元素

slice := int

//建立乙個新切片,其長度為2個元素,容量為4個元素

newslice := slice[1:3]

對於底層陣列容量是k的切片slice[i:j]來說

長度: j - i

容量: k - i

建立切片時的第3個索引

第三個索引可以用來控制新切片的容量,其目的並不是要增加容量,而是要限制容量

slice[i:j:k]

長度 j - i

容量 k - i

map

儲存一系列無序鍵值對

自定義型別

使用關鍵字struct建立乙個結構型別

type user struct
基於乙個已有型別,將其作為新型別的型別說明

type duration int64

// int64型別叫作duration的基礎型別。go 並不認為 duration 和 int64 是同一型別。這兩個型別是完全不同的有區別的型別。

struct

struct 有2中方法, 值方法和指標方法

也可以使用指標來呼叫值方法,編譯器轉換後的**

(*obj).method()

也可以使用值來呼叫引用方法,編譯器轉換後的**

(&ojb).method()

宣告乙個方法時使用 值方法 還是 指標方法,取決於想得到乙個新值還是想修改原有的值

介面

用來定義行為

channel

unbuffered := make(chan int)    //無緩衝通道

buffered := make(chan int, 10)

golang 讀書筆記 資料型別

slice 切片 代表變長的序列,序列中每個元素都有相同的型別。乙個slice型別一般寫作t,其中t代表slice中元素的型別 slice的語法和陣列很像,只是沒有固定長度而已。乙個slice由三個部分構成 指標 長度和容量。指標指向第乙個slice元素對應的底層陣列元素的位址,要注意的是slice...

mysql運維 讀書筆記 Mysql 讀書筆記

mysql儲存時間有兩種型別 datetime和timestamp。分別說一下兩者的區別。datetime,以8位元組儲存時間,理論上可以從0000年儲存到9999年。並且沒有時區的概念,它儲存的就是乙個時間點的概念。timestamp和datetime最主要的不同就是,它是以4個位元組儲存,由19...

struts in action讀書筆記

struts in action 學習筆記 一 struts的控制流 因為web 應用是動態的,所以很難表現 乙個真正固定的控制流 取決於環境,不同的方式下有很多不同的事情發生 特別是在web 應用中。但是事情仍然有乙個通用的秩序。如果你是個struts,應用框架,甚至web 應用的新手,這些流程剛...