在本教程中,我們會學習如何建立我們自己的自定義錯誤,並在我們建立的函式和包中使用它。我們會使用與標準庫中相同的技術,來提供自定義錯誤的更多細節資訊。
使用 new 函式建立自定義錯誤
建立自定義錯誤最簡單的方法是使用 errors 包中的 new 函式。
在使用 new 函式 建立自定義錯誤之前,我們先來看看 new 是如何實現的。如下所示,是 errors 包 中的 new 函式的實現。
// package errors implements functions to manipulate errors.
package errors
// new returns an error that formats as the given text.
func new(text string) error
}// errorstring is a trivial implementation of error.
type errorstring struct
func (e *errorstring) error() string
new 函式的實現很簡單。errorstring 是乙個結構體型別,只有乙個字串字段 s。第 14 行使用了 errorstring 指標接受者(pointer receiver),來實現 error 介面的 error() string 方法。
第 5 行的 new 函式有乙個字串引數,通過這個引數建立了 errorstring 型別的變數,並返回了它的位址。於是它就建立並返回了乙個新的錯誤。
現在我們已經知道了 new 函式是如何工作的,我們開始在程式裡使用 new 來建立自定義錯誤吧。
我們將建立乙個計算圓半徑的簡單程式,如果半徑為負,它會返回乙個錯誤。
package main
import (
"errors"
"fmt"
"math"
)func circlearea(radius float64) (float64, error)
return math.pi * radius * radius, nil
}func main()
fmt.printf("area of circle %0.2f", area)
}
在 glayground 上執行
在上面的程式中,我們檢查半徑是否小於零(第 10 行)。如果半徑小於零,我們會返回等於 0 的面積,以及相應的錯誤資訊。如果半徑大於零,則會計算出面積,並返回值為 nil 的錯誤(第 13 行)。
在 main 函式裡,我們在第 19 行檢查錯誤是否等於 nil。如果不是 nil,我們會列印出錯誤並返回,否則我們會列印出圓的面積。
在我們的程式中,半徑小於零,因此列印出:
area calculation failed, radius is less than zero
Golang中重複錯誤處理的優化方法
golang 錯誤處理最讓人頭疼的問題就是 裡充斥著 if err nil 它們破壞了 的可讀性,本文收集了幾個例子,讓大家明白如何優化此類問題。讓我們看看 errors are values 中提到的乙個 io.writer 例子 err fd.write p0 a b if err nil er...
golang定義錯誤的方式
golang定義錯誤的方式 1 同一error類,多個錯誤例項,只是錯誤內容不同,golang官方做法 直接定義在io package 中,全域性變數。var eof errors.new eof var errclosedpipe errors.new io read write on close...
Golang的錯誤處理
1 當錯誤 panic 發生後,程式就會退出 崩潰 2 希望發生錯誤後,能夠捕獲到錯誤,並對其進行處理,保證後續程式能夠繼續執行 go中引入的處理方式是 defer panic recover。其中go中可以丟擲乙個panic異常,然後在defer中通過recover捕獲這個異常,然後正常處理。1 ...