go的error比較靈活.但是自身對error處理的機制有不太好用,我們可以自定義錯誤輸出:
只要所有實現了 error() 方法的物件都可以, 這裡給個比較簡單的demo,後續整理乙個error的優化封裝:
package mainimport (
"fmt")
type nameemtpyerror
struct
//nameemtpyerror實現了 error() 方法的物件都可以
func (e *nameemtpyerror) error() string
func namecheck(name
string) (bool
, error) //
注意error這裡必須是位址&引用
}
return
true
, nil
}func main()
else
}
在go裡定義錯誤異常的方式有這麼兩種,但都需要你的返回值是error型別的:
第一種方式是使用golang標準庫包errors 來定義錯誤。使用方法很簡單,只需要 return errors.new(「錯誤資訊」) 。 這樣就是乙個最簡單的錯誤返回。
第二種方式是借用struct結構體,建立乙個struct的error()方法,注意這個方法名是error,不然會出現找不到error方法。
下面我們看乙個比較完整的error的使用方法。不僅有errors,還有struct error()方式.
package mainimport (
"errors""
fmt"
)type equalerror
struct
//方法名字是error()
func (e equalerror) error() string
//使用errors.new簡單生成
func equal(n int) (int
, error)
return
n, nil
}func diyequal(n
int) (int
, error) //
會呼叫equalerror的error方法
}
return
n, nil
}func main()
else
//不適用erros,自定義錯誤方式.
if result, err := diyequal(20); err !=nil
else
}
Go 自定義排序
go語言包中包含了排序包 sort,其中針對一般的strings int型別已經有了排序方法 sort.ints a int sort.strings a string 1 分別實現三個函式 func p myslice len int func p myslice less i,j int boo...
Go 自定義排序
有的時候我們希望排序不是僅僅按照自然順序排序。例如,我們希望按照字串的長度來對乙個字串陣列排序而不是按照字母順序來排序。這裡我們介紹一下go的自定義排序。an highlighted block package main import sort import fmt 為了能夠使用自定義函式來排序,我...
為什麼Go中有的自定義error會導致記憶體溢位
分享乙個在go tour上看到的練習題,練習裡要求使用者自己定義乙個錯誤型別,實現error介面,函式在引數不滿足條件的時候返回自定義的錯誤型別的值。練習中特別提示使用者不要在實現的error方法裡直接使用fmt.sprint e 以避免造成程式記憶體溢位。下面貼一下具體的練習題 從之前的練習中複製...