golang中建立錯誤的方法

2021-10-14 00:11:53 字數 1448 閱讀 3933

在本教程中,我們會學習如何建立我們自己的自定義錯誤,並在我們建立的函式和包中使用它。我們會使用與標準庫中相同的技術,來提供自定義錯誤的更多細節資訊。

使用 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 ...