goang 錯誤&異常處理機制
基本概念
錯誤:意料之內,可能出的問題, 比如網路連線超時,json解析錯誤等
異常:意料之外,不應該出的問題,比如空指標異常,下標溢位等異常
錯誤處理
golang 使用error介面作為標準錯誤介面,
通常情況下錯誤處理方式
if err != nil{ //錯誤處理邏輯}
error作為函式返回值時應該放在最後一個返回值:eg:
func get()(res string, err error){ return}
使用error作為返回值的規範是函式體內有可能產生多種錯誤時返回error,當僅有一種error的可能或者型別時應該用bool型別代替,這樣更簡潔,eg:
//此方法種只有一種邏輯上的錯誤,不應該返回error, 推薦使用checkNumAreaB函式的寫法func checkNumArea(num int) error { if num > 100{ return errors.New("超出值域") } return nil } func checkNumAreaB(num int) bool { if num > 100{ return false } return true}
異常處理
The panic built-in function stops normal execution of the current goroutine. When a function F calls panic, normal execution of F stops immediately. Any functions whose execution was deferred by F are run in the usual way, and then F returns to its caller. To the caller G, the invocation of F then behaves like a call to panic, terminating G's execution and running any deferred functions. This continues until all functions in the executing goroutine have stopped, in reverse order. At that point, the program is terminated and the error condition is reported, including the value of the argument to panic. This termination sequence is called panicking and can be controlled by the built-in function recover.
從官方介紹可知panic呼叫會使整個呼叫棧逆序終止,最終導致整個程式終止並輸出調中棧資訊, 可使用recover方法捕獲異常而避免程式終結,生產環境種必須有此操作以避免程式終止
panic類似java的throw python的raise, recover 類似try catch
常用處理方式如下
func A(){ defer func(){ fmt.Println("3") }() defer func(){ if err := recover(); err != nil{ fmt.Println("err:", err) } }() panic("1") fmt.Println("2") } A()//outout://err:1//3
defer的執行邏輯時LIFO,
defer的執行是在函式執行完畢,return,panic之後的
panic之後的邏輯不再執行
作者:火頭陀
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/430/viewspace-2819968/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- .NET----錯誤和異常處理機制
- PHP異常、錯誤處理機制筆記PHP筆記
- 異常處理機制
- 異常錯誤資訊處理
- Oracle異常錯誤處理Oracle
- ORACLE 異常錯誤處理Oracle
- PHP錯誤處理和異常處理PHP
- Java異常處理機制Java
- 異常處理機制(二)之異常處理與捕獲
- Python異常處理機制、除錯、測試Python除錯
- 08.異常處理機制
- C++異常處理機制C++
- java異常的處理機制Java
- Java 的異常處理機制Java
- Python異常處理機制Python
- 8.異常處理機制
- Python錯誤處理和異常處理(二)Python
- rust學習十、異常處理(錯誤處理)Rust
- php錯誤與異常處理方法PHP
- C++錯誤和異常處理C++
- Laravel Exceptions——異常與錯誤處理LaravelException
- SpringMVC異常的處理機制SpringMVC
- Java 中的異常處理機制Java
- Asp.Net 異常處理機制ASP.NET
- 解析Oracle developer 異常處理機制OracleDeveloper
- Struts的異常處理機制 (轉)
- 總結:整理 oracle異常錯誤處理 .Oracle
- PHP系列(七)PHP錯誤異常處理PHP
- pl/sql中錯誤的異常處理SQL
- [php]php錯誤處理機制PHP
- C++ 異常處理機制詳解:輕鬆掌握異常處理技巧C++
- SpringBoot錯誤處理機制以及自定義異常響應原理解析Spring Boot
- C#中的異常處理機制C#
- 深入理解java異常處理機制Java
- 在vue使用異常處理做錯誤提示Vue
- 前端錯誤收集以及統一異常處理前端
- javascript中的錯誤處理機制JavaScript
- Go語言錯誤處理機制Go