Learn Golang in Days - Day 15-Go錯誤處理
摘要:
Learn Golang in Days - Day 15-Go錯誤處理
簡介
Go語言通過內建錯誤介面提供了簡單的錯誤處理機制
error型別是一個介面型別,它的定義如下
type error interface {
Error() string
...
Learn Golang in Days - Day 15-Go錯誤處理
簡介
- Go語言通過內建錯誤介面提供了簡單的錯誤處理機制
- error型別是一個介面型別,它的定義如下
type error interface { Error() string }
例子
package main import "fmt" import "errors" func main() { //var f = 3.4 //正確 var f float32 = -2.0 var n, err = sqrt(f) if err != nil { fmt.Printf("error, %s\n", err) return } fmt.Printf("sqrt(%f) = %f\n", f, n) } func sqrt(f float32) (float32, error) { if f < 0 { fmt.Printf("err|| math,f < 0\n") return 0, errors.New("math,f < 0") } return f * f, nil }
複雜例子
- 定義結構體,實現Error介面
package main import "fmt" //定義結構體 type DivideError struct { dividee int divider int } //定義錯誤介面 func (de *DivideError) Error() string { strFormat := ` cannot proceed, the divider is zero. dividee: %d divider: 0 ` return fmt.Sprintf(strFormat, de.dividee) } //定義`int`型別除法運算的函式 func Divide(varDividee int, varDivider int) (result int, errorMsg string) { if varDivider == 0 { dData := DivideError{ dividee: varDividee, divider: varDivider, } errorMsg = dData.Error() return } else { return varDividee / varDivider, "" } } func main() { fmt.Println("-----正常情況-------") //正常情況 if result, errorMsg := Divide(100, 10); errorMsg == "" { fmt.Println("100/10 = ", result) } fmt.Println("-----異常情況-------") //當被除數為0的時候會返回錯誤資訊 if _, errorMsg := Divide(100, 0); errorMsg != "" { fmt.Println("errorMsg is: ", errorMsg) } }