參考:
http://c.biancheng.net/view/4284.html
關鍵點
通過關鍵詞匯
悔捶,實現(xiàn)快速
理解唇礁,記憶
的目的
:
1扫俺、
error
接口?A狰晚、是Go語言中作為
錯誤處理
的標準
描述,如果函數(shù)要返還錯誤
的話缴啡,則返回值列表中肯定
有error壁晒, 可以逐層
返回,直到被處理业栅。B秒咐、建議谬晕,error作為
最后一個
返回值2、error
基本
用法携取?創(chuàng)建一個 error 最簡單的方法就是
調用
errors.New 函數(shù)攒钳,它會根據(jù)傳入的錯誤信息
返回一個新
的 error
3、如何
自定義錯誤
類型雷滋? 如:A不撑、
定義
一個結構體
B、實現(xiàn)
Error()
方法晤斩,即可
1焕檬、error基本
用法
Go語言中返回的 error 類型究竟是什么呢?查看Go語言的源碼就會發(fā)現(xiàn) error 類型是一個非常簡單的接口類型澳泵,如下所示:
// The error built-in interface type is the conventional interface for
// representing an error condition, with the nil value representing no error.
type error interface {
Error() string
}
error 接口有一個簽名
為 Error() string 的方法实愚,所有實現(xiàn)該接口的類型都可以當作一個錯誤類型。
Error() 方法給出了錯誤的描述兔辅,在使用 fmt.Println 打印錯誤時腊敲,會在內部調用 Error() string 方法來得到該錯誤的描述。
一般情況下维苔,如果函數(shù)需要返回錯誤碰辅,就將 error 作為多個
返回值中的最后一個
(但這并非
是強制要求)。
創(chuàng)建一個 error 最簡單的方法就是調用 errors.New 函數(shù)蕉鸳,它會根據(jù)傳入的錯誤信息返回一個新的 error乎赴,示例代碼如下:
package main
import (
"errors"
"fmt"
"math"
)
func Sqrt(f float64) (float64, error) {
if f < 0 {
return -1, errors.New("math: square root of negative number")
}
return math.Sqrt(f), nil
}
func main() {
result, err := Sqrt(-13)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
運行結果如下:
math: square root of negative number
上面代碼中簡單介紹了使用 errors.New 來返回一個錯誤信息,與其他語言的異常相比潮尝,Go語言的方法相對更加容易榕吼、直觀。
?
?
2勉失、如何自定義錯誤
類型
除了上面的 errors.New 用法之外羹蚣,我們還可以使用 error 接口自定義一個 Error() 方法,來返回自定義的錯誤信息乱凿。
package main
import (
"fmt"
"math"
)
type dualError struct {
Num float64
problem string
}
func (e dualError) Error() string {
return fmt.Sprintf("Wrong!!!,because \"%f\" is a negative number", e.Num)
}
func Sqrt(f float64) (float64, error) {
if f < 0 {
return -1, dualError{Num: f}
}
return math.Sqrt(f), nil
}
func main() {
result, err := Sqrt(-13)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
運行結果如下:
Wrong!!!,because "-13.000000" is a negative number
?
?