開心檔之Go 錯誤處理
# [Go 錯誤處理](%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86)
Go 語言透過內建的錯誤介面提供了非常簡單的錯誤處理機制。
error型別是一個介面型別,這是它的定義:
```
type error interface {
Error() string
}
```
我們可以在編碼中透過實現 error 介面型別來生成錯誤資訊。
函式通常在最後的返回值中返回錯誤資訊。使用errors.New 可返回一個錯誤資訊:
```
func Sqrt(f float64) (float64, error) {
if f < 0 {
return 0, errors.New("math: square root of negative number")
}
// 實現
}
```
在下面的例子中,我們在呼叫Sqrt的時候傳遞的一個負數,然後就得到了non-nil的error物件,將此物件與nil比較,結果為true,所以fmt.Println(fmt包在處理error時會呼叫Error方法)被呼叫,以輸出錯誤,請看下面呼叫的示例程式碼:
```
result, err:= Sqrt(-1)
if err != nil {
fmt.Println(err)
}
```
### [例項](%E5%AE%9E%E4%BE%8B)
## [例項](%E5%AE%9E%E4%BE%8B-1)
package main
import (
"fmt"
)
// 定義一個 DivideError 結構
type DivideError struct {
dividee int
divider int
}
// 實現 `error` 介面
func (de *DivideError) Error() string {
strFormat := `
Cannot proceed, the divider is zero.
dividee: %d
divider: 0
`
return fmt.Sprintf(strFormat, de.dividee)
}
// 定義 `int` 型別除法運算的函式
func Divide(varDividee int, varDivider int) (result int, errorMsg string) {
if varDivider == 0 {
dData := DivideError{
dividee: varDividee,
divider: varDivider,
}
errorMsg = dData.Error()
return
} else {
return varDividee / varDivider, ""
}
}
func main() {
// 正常情況
if result, errorMsg := Divide(100, 10); errorMsg == "" {
fmt.Println("100/10 = ", result)
}
// 當除數為零的時候會返回錯誤資訊
if _, errorMsg := Divide(100, 0); errorMsg != "" {
fmt.Println("errorMsg is: ", errorMsg)
}
}
執行以上程式,輸出結果為:
```
100/10 = 10
errorMsg is:
Cannot proceed, the divider is zero.
dividee: 100
divider: 0
```
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026554/viewspace-2943193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Go 錯誤處理Go
- go的錯誤處理Go
- Go語言之錯誤處理Go
- 開心檔之C++ 訊號處理C++
- 開心檔之C++ 前處理器C++
- go 錯誤處理設計思考Go
- Python之錯誤異常和檔案處理Python
- 開心檔之Go教程Go
- Day03:檔案開啟;錯誤處理
- Go語言基礎-錯誤處理Go
- Go語言錯誤處理機制Go
- Go 併發 2.2:錯誤處理模式Go模式
- [譯] Go 1.13 errors 包錯誤處理GoError
- Go 的錯誤處理策略 筆記Go筆記
- 開心檔之Go 併發Go
- 寫給go開發者的gRPC教程-錯誤處理GoRPC
- Golang通脈之錯誤處理Golang
- 二、GO 程式設計模式:錯誤處理Go程式設計設計模式
- 錯誤處理
- 開心檔之Go 語言常量Go
- 兄弟連go教程(15)函式 - 錯誤處理Go函式
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式
- 優化 Go 錯誤處理,魔改 Go recover 靠譜嗎?優化Go
- Python錯誤處理Python
- PHP 錯誤處理PHP
- php錯誤處理PHP
- Go 錯誤處理指北:Defer、Panic、Recover 三劍客Go
- Go 為什麼不像 Rust 用 ?!做錯誤處理?GoRust
- 錯誤處理:如何通過 error、deferred、panic 等處理錯誤?Error
- 深入 Go 的錯誤處理機制,學會如何使用Go
- 深入 Go 的錯誤處理機制,理解設計思想Go
- openGauss 處理錯誤表
- axios 的錯誤處理iOS
- 清華尹成帶你實戰GO案例(24)Go 錯誤處理Go
- Yii2 之錯誤處理深入分析
- 開心檔之Go 語言環境安裝Go
- Python錯誤處理和異常處理(二)Python
- 這個新 Go 錯誤處理提案,能解決問題不?Go