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個索引
第三個索引可以用來控制新切片的容量,其目的並不是要增加容量,而是要限制容量
mapslice[i:j:k]
長度 j - i
容量 k - i
儲存一系列無序鍵值對
自定義型別
使用關鍵字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 應用的新手,這些流程剛...