実用Go言語 第五章 エラーハンドリングよりメモ
goアプリケーションでエラーを作成する方法は大きく二つに分けられる。
- 標準ライブラリの関数を使って作成
- アプリケーション独自のエラー型を定義
errors.new
もっともシンプルなエラー生成法。変数に保存すると区別してハンドリングしやすい。
var ErrNotFound = errors.New("not found`)
func findBook(isbn string) (*Book, error) {
return nil, ErrNotfound
}
fmt.Errorf
フォーマットされた文字列を元にエラーを作成
func validate(length int) error {
if length <= 0 {
return fmt.Errorf("length must be greater than 0, length = %d", length)
}
return nil
}
独自のエラー型
Errorインターフェースを満たした独自の型を定義する方法。
以下goのエラーインターフェース
type error interface {
Error() string
}
例えば以下のHTTPErrorはErrorインターフェースを満たす。
type HTTPError struct {
StatusCode int
URL string
}
func (he *HTTPError) Error () string {
return fmt.Sprintf("http status code = %d, url = %s", he.StatusCode, he.URL)
}
エラーを使用する際は以下のようにポインターを使用する
if resp.StatusCode != http.StatusOK {
return nil, &HTTPError {
StatusCode: resp.StatusCode,
URL: url,
}
}