1.slice:做爲參數傳遞時,傳遞的是地址,當append時,在新的內存地址分配數據,可是沒有返回給原的slice,只能經過返回值的方式賦值給slice
2.func(a []int):傳遞,能夠
3.匿名函數:函數內部的聲明匿名函數
4.閉包:初始化,使用閉包
5.defer(延遲):
1>相似析構函數,在函數執行結束後按照調用順序,反序執行(棧)
2>即便發生嚴重錯誤也執行,前提是沒有發生錯誤以前先註冊
3>支持匿名函數
4>經常使用於資源清理,文件關閉,解鎖等
5>匿名函數訪問變量,若是是直接訪問,則訪問引用(即最後執行時的參數值),若是是傳值訪問,則是拷貝
6>go 沒有異常機制,但能夠panic/recover模式處理錯誤,panic能夠在任何地方引起,recover只有在defer 調用的函數中有效,而且處理panic後,程序能夠繼續執行
6.struct:
語法相似c,功能就是類,成員屬性能夠無名;
但必須有類型聲明,當出現匿名對象時,必須顯式初始化;
"=="判斷:屬性相同時返回true,可是對象的地址不一樣,和equal相同
7.點運算符與指針:與cc++不一樣,即便是指針訪問屬性也使用點語法,因此聲明時,保存對象的地址,操做指針時可使用點語法操做
8.值傳遞和引用傳遞:除了指針、chanel、匿名函數訪問是引用傳遞,其餘的都是值傳遞
9.匿名結構,初始化,嵌套:嵌套時,匿名屬性,只能經過鏈式賦值的方式賦值
10.繼承:GO中不存在繼承關係,但存在組合,即父類結構做爲成員存放;
組合實際是將其屬性和方法賦值放在子類中,因此能夠直接點語法訪問父類的屬性和方法;
當匿名組合與當前組合屬性、方法重名時不報錯,點語法做用的是當前結構的屬性、方法;
若是想訪問匿名結構的同名屬性、方法,直接點語法其匿名結構名後訪問其屬性、方法;
同級不能同名屬性、方法,能夠調整組合解決;
不一樣級能夠同名屬性、方法,點語法訪問便可。
11.在線項目api生成:gowalker.org/,閱讀開源項目很是方便
12.方法:method
接收者receiver,代表方法所屬結構,基本數據類型能夠type,做爲接收者,爲其增長方法;
不支持重載,即同一結構下的方法不容許同名;
對象調用方法,類方法調用對象;
屬性首字母大寫是public,屬性首字母小寫是包內訪問權限;
13.接口:interface
>=1個的方法簽名集合
只要實現了方法簽名相同的方法,即實現了接口
接口只是方法聲明,沒有實現,沒有數據字段
接口能夠匿名嵌套,也可嵌套如結構中
14.多態:OK patern判斷
接口能夠指向全部實現接口結構的對象;
interface{} 能夠指向全部對象,使用type swtich判斷方便;
結構之間是組合關係,不存在繼承,因此沒法多態,沒法強轉;
接口調用不會作receiver的自動轉換;
15.反射:
t.Kind() == reflect.Struct 判斷是不是結構類型;
.()斷定其結構類型,.(type)能夠經過switch判斷;
v.Field(i).Interface()得到其屬性的方法;
經過反射能夠訪問、設置屬性(匿名屬性),調用方法(方法嵌套):
1>普通屬性:
讀:
訪問類型typeof,訪問屬性值valueof;
獲取field:直接訪問FieldByName,順序訪問FieldByIndex;
得到field值:Interface()
寫:
reflect.ValueOf(傳入指針,不然只是拷貝,拷貝值沒法編輯),返回值是指針,沒法經過指針設置值;panic: reflect: reflect.Value.SetFloat using unaddressable value
v = v.Elem(),得到原來數據的引用,直接設置數據便可;panic: reflect: call of reflect.Value.FieldByName on ptr Value
結構中只有被導出字段(首字母大寫)纔是可設置的;panic: reflect: reflect.Value.SetString using value obtained using unexported fieldhtml
2>匿名屬性:可使用FieldByName、FieldByIndex
3>普通方法:
調用:
args := []reflect.Value{reflect.ValueOf("ss")}
v.Method(0).Call(args)
4>嵌套方法:嵌套時和屬性同樣,均可以直接調用
16.併發concurrency:
1>go執行
2>Channel:
經過消息來共享內存,channel是引用類型;
默認是阻塞同步的,make建立,close關閉,不然死鎖;
可設置單項或雙向通道,for range迭代;
可設置緩存大小,未被填滿以前不會阻塞:有緩存是異步的,無緩存是同步的;
並行運行時,可使用channel、sync進行異步控制,讓主程序等待子程序執行完畢後結束;c++
WEB部分(beego框架):
1.controller 與view傳值
{{with .name}} {{end}}
{{range .name}} {{.}} {{end}}
2.view內置的模板函數:str2html
3.orm:增刪改查
全部操做函數都須要傳入結構體的指針api