標籤:ack 處理 通過 return sprint import can ror 產生
Go錯誤處理
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)}
具體執行個體如下:
package mainimport "fmt"// 定義一個 DivideError 結構type DivideError struct { dividee int //除數 divider int //被除數}// 為DivideError綁定Error方法,實現 error 介面func (de *DivideError)Error() string { //使用單反引號可以使輸入的內容書寫格式更加好看 strFormat := ` Cannot procceed, the divider is zero. dividee: %d divider: 0 ` return fmt.Sprintf(strFormat, de.dividee)}// 定義 int 類型除法運算的函數func Divide(varDividee int, varDivider int) (result int, errorMessage string) { if varDivider == 0 { //簡單方法的執行個體化結構體 dData := DivideError{ dividee: varDividee, divider: varDivider, } errorMessage = dData.Error() //調用方法得到對應錯誤資訊 return } else { return varDividee / varDivider, "" }}func main() { // 正常情況 if result, errorMessage := Divide(100, 6); errorMessage == "" { fmt.Println("100 / 6 = ", result) } // 當除數為0的時候會返回錯誤資訊 if _, errorMessage := Divide(100, 0); errorMessage != "" { fmt.Println("errorMessage is : ", errorMessage) }}
運行結果:
100 / 6 = 16errorMessage is : Cannot procceed, the divider is zero. dividee: 100 divider: 0
GO_10:GO語言基礎之error