溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

golang中怎么創(chuàng)建自定義錯(cuò)誤

發(fā)布時(shí)間:2020-06-18 11:44:35 來源:億速云 閱讀:204 作者:鴿子 欄目:編程語言

在本教程中,我們會(huì)學(xué)習(xí)如何創(chuàng)建我們自己的自定義錯(cuò)誤,并在我們創(chuàng)建的函數(shù)和包中使用它。我們會(huì)使用與標(biāo)準(zhǔn)庫中相同的技術(shù),來提供自定義錯(cuò)誤的更多細(xì)節(jié)信息。

使用 New 函數(shù)創(chuàng)建自定義錯(cuò)誤

創(chuàng)建自定義錯(cuò)誤最簡(jiǎn)單的方法是使用 errors 包中的 New 函數(shù)。

在使用 New 函數(shù) 創(chuàng)建自定義錯(cuò)誤之前,我們先來看看 New 是如何實(shí)現(xiàn)的。如下所示,是 errors 包 中的 New 函數(shù)的實(shí)現(xiàn)。

// Package errors implements functions to manipulate errors.
package errors
// New returns an error that formats as the given text.
func New(text string) error {
    return &errorString{text}
}
// errorString is a trivial implementation of error.
type errorString struct {
    s string
}
func (e *errorString) Error() string {
    return e.s
}

New 函數(shù)的實(shí)現(xiàn)很簡(jiǎn)單。errorString 是一個(gè)結(jié)構(gòu)體類型,只有一個(gè)字符串字段 s。第 14 行使用了 errorString 指針接受者(Pointer Receiver),來實(shí)現(xiàn) error 接口的 Error() string 方法。

第 5 行的 New 函數(shù)有一個(gè)字符串參數(shù),通過這個(gè)參數(shù)創(chuàng)建了 errorString 類型的變量,并返回了它的地址。于是它就創(chuàng)建并返回了一個(gè)新的錯(cuò)誤。

現(xiàn)在我們已經(jīng)知道了 New 函數(shù)是如何工作的,我們開始在程序里使用 New 來創(chuàng)建自定義錯(cuò)誤吧。

我們將創(chuàng)建一個(gè)計(jì)算圓半徑的簡(jiǎn)單程序,如果半徑為負(fù),它會(huì)返回一個(gè)錯(cuò)誤。

package main
import (  
    "errors"
    "fmt"
    "math"
)
func circleArea(radius float64) (float64, error) {  
    if radius < 0 {
        return 0, errors.New("Area calculation failed, radius is less than zero")
    }
    return math.Pi * radius * radius, nil
}
func main() {  
    radius := -20.0
    area, err := circleArea(radius)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Area of circle %0.2f", area)
}

在 glayground 上運(yùn)行

在上面的程序中,我們檢查半徑是否小于零(第 10 行)。如果半徑小于零,我們會(huì)返回等于 0 的面積,以及相應(yīng)的錯(cuò)誤信息。如果半徑大于零,則會(huì)計(jì)算出面積,并返回值為 nil 的錯(cuò)誤(第 13 行)。

在 main 函數(shù)里,我們?cè)诘?19 行檢查錯(cuò)誤是否等于 nil。如果不是 nil,我們會(huì)打印出錯(cuò)誤并返回,否則我們會(huì)打印出圓的面積。

在我們的程序中,半徑小于零,因此打印出:

Area calculation failed, radius is less than zero

以上就是golang中創(chuàng)建錯(cuò)誤的方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI