這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
14.筆記go語言——細節匯總一
slice和數組在聲明時的區別:聲明數組時,方括弧內寫明了數組的長度或使用...自動
計算長度,而聲明slice時,方括弧內沒有任何字元。
對於slice有幾個有用的內建函數:
l len 擷取slice的長度
l cap 擷取slice的最大容量
l append 向slice裡面追加一個或者多個元素,然後返回一個和slice一樣類型的slice
l copy 函數copy從源slice的src中複製元素到目標dst,並且返回複製的元素的個數
make用於內建類型(map、slice 和channel)的記憶體配置。new用於各種類型的記憶體配置。
New與make
內建函數new本質上說跟其它語言中的同名函數功能一樣:new(T)分配了零值填充的T類型的記憶體空間,並且返回其地址,即一個*T類型的值。用Go的術語說,它返回了一個指
針,指向新分配的類型T的零值。有一點非常重要:
new返回指標。
內建函數make(T, args)與new(T)有著不同的功能,make只能建立slice、map和channel,
並且返回一個有初始值(非零)的T類型,而不是*T。本質來講,導致這三個類型有所不同的
原因是指向資料結構的引用在使用前必須被初始化。例如,一個slice,是一個包含指向數
據(內部array)的指標、長度和容量的三項描述符;在這些項目被初始化之前,slice為
nil。對於slice、map和channel來說,make初始化了內部的資料結構,填充適當的值。
make返回初始化後的(非零)值。
流程式控制制
流程式控制制包含分三大類:條件判斷,迴圈控制和無條件跳轉。
Go裡面最強大的一個控制邏輯就是for,它即可以用來迴圈讀取資料,又可以當作while來控制邏輯,還能迭代操作。
for配合range可以用於讀取slice和map的資料.
Go裡面switch預設相當於每個case最後帶有break,匹配成功後不會自動向下執行其他case,而是跳出整個switch, 但是可以使用fallthrough強制執行後面的case代碼。
函數
函數是Go裡面的核心設計,它通過關鍵字func來聲明,它的格式如下:
func funcName(input1 type1, input2 type2)(output1 type1, output2 type2) {
//這裡是處理邏輯代碼
//返回多個值
return value1, value2
}
Go函數支援變參。 接受變參的函數是有著不定數量的參數的。為了做到這點,首先需要定義函數使其接受變參:
func myfunc(arg ...int) {}
arg ...int告訴Go這個函數接受不定數量的參數。注意,這些參數的類型全部是int。
defer
Go語言中有種不錯的設計,即延遲(defer)語句,你可以在函數中添加多個defer語句。
當函數執行到最後時,這些defer語句會按照逆序執行,最後該函數返回。
Panic和 Recover
Go沒有像Java那樣的異常機制,它不能拋出異常,而是使用了panic和recover機制。應當把它作為最後的手段來使用,也就是說,你的代碼中應當沒有,或者很少有panic的東西。這是個強大的工具,請明智地使用它。
main函數和 init函數
Go裡面有兩個保留的函數:init函數(能夠應用於所有的package)和main函數(只能應
用於package main)。
物件導向
Go語言可以設計出基本的物件導向的程式了,但是Go裡面的物件導向是如此的簡單,沒有任何的私人、公有關鍵字,通過大小寫來實現(大寫開頭的為共有,小寫開頭的為私人),方法也同樣適用這個原則。
interface
Go語言裡面設計最精妙的應該算interface,它讓物件導向,內容組織實現非常的方便。interface是一組method的組合,我們通過interface來定義對象的一組行為。
反射
Go語言實現了反射,所謂反射就是動態運行時的狀態。我們一般用到的包是reflect包。
並發
有人把Go比作21世紀的C語言,第一是因為Go語言設計簡單,第二,21世紀最重要的就是並行程式設計,而GO從語言層面就支援了並行。
goroutine是Go並行設計的核心。
goroutine是通過Go的runtime管理的一個線程管理器。
25個關鍵字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
• var和const 是Go語言基礎裡面的變數和常量申明
• package和import已經有過短暫的接觸
• func 用於定義函數和方法
• return 用於從函數返回
• defer 用於類似解構函式
• go 用於並行
• select 用於選擇不同類型的通訊
• interface 用於定義介面,
• struct 用於定義抽象資料類型,
• break、 case、 continue、 for、 fallthrough、 else、 if、 switch、 goto、 default裡面
• chan用於channel通訊
• type用於聲明自訂類型
• map用於聲明map類型資料
• range用於讀取slice、map、channel資料