panic和recover
===
### Panic
- 用戶不可恢復的錯誤
- panic 推出前會執行defer指定的內容
~~~
func division(a,b int) int {
if b == 0 {
panic("b = 0")
}
c := int(a / b)
return c
}
func TestDivision(t *testing.T) {
i := division(1, 0)
fmt.Println(i)
}
~~~
### recover 用戶錯誤恢復
```
defer func() {
if err != recover();err!=nil{
// 恢復代碼
}
}
```
~~~
func division(a,b int) int {
if b == 0 {
panic("b = 0")
}
c := int(a / b)
return c
}
func TestDivision(t *testing.T) {
defer func() {
if err := recover();err != nil {
fmt.Println(err)
}
}()
i := division(1, 0)
fmt.Println(i)
}
~~~
注意:如果沒有處理好,就會形成僵尸服務進程
- Hello World
- UDP
- UDP服務端
- UDP客戶端
- UDP廣播
- 錯誤處理
- 編寫好的異常處理
- panic和recover
- 并發編程
- Hello Goruntine
- 共享內存并發機制
- RWMutex
- CSP并發機制
- 多路復用和超時控制
- 通道關閉與廣播
- Context與任務的取消
- 只運行一次
- 按需任意任務完成
- 所有任務完成
- 補充:range channel注意實現
- 對象池
- sync.Pool臨時對象池
- 單元測試
- 表格測試法
- Banchmark
- BDD
- 反射
- 利用反射編寫靈活的代碼
- Struct Tag
- 萬能程序
- 常用架構模式
- Pipe-filter pattern
- Micro Kernel
- 性能分析
- 高性能代碼
- sync.MAP分析
- Concurrent Map
- GC友好的代碼
- Uber開發風格規范