這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
一些學習總結
1、GoLang裡面interface類型式一切類型的基底類型,一個函數的參數如果始inteface{}
說明可以接受一切類型,只要這個類型中包含需要的那個方法,調用時候就不會失敗;
func test(i interface{}){ i.Get()}
2、方法定義中可以制定某個類型(或者指標)是其調用者,方法的返回可以按照名稱返回;
func (p *A) test(i int){}func test()(p int){ p:=1 return}
3、switch流程可以強制穿透功能;
4、語意上對並發的支援,用go關鍵詞;
5、make關鍵詞只能建立channel,數群組類型;其它對象的建立用new關鍵詞;
6、方法內用new關鍵詞建立的對象(指標)可以返回,用&標記也可以返回本地指標;
7、方法參數如果是數字,除了類型相同外,大小必須明確,否則視為slice類型;
數組傳參是按照值傳遞,map、slice按照引用傳遞;
8、數組,slice,map結構的遍曆用range實現;
9、不支援指標地址的++操作;
10、type A struct{} 、type B A 、type C struct{A} 三個類型中A和C可以共用方法,B和A不共用方法;
11、反射(自省)可以獲得類型的欄位和方法資訊,和Python/Java/CSharp類似,沒有深入研究;
12、defer 在方法返回時調用,如果方法中有多個go 方法,會在每個go 方法調用完後被執行;
13、類型轉換,基本類型(string,bytes,int,float)之間的轉換通過內建方法實現
struct通過 struct名稱(變數名稱),也可以通過reflect及switch實現(介面變數名.(type));
14、change/select/chan 類似與Unix中的管道概念,支援讀、寫操作;
15、對於複雜類型的格式化輸出可以用 %#v ,這個格式化出來的資訊比較全面;