0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

goのエラー作成

Posted at

実用Go言語 第五章 エラーハンドリングよりメモ

goアプリケーションでエラーを作成する方法は大きく二つに分けられる。

  1. 標準ライブラリの関数を使って作成
  2. アプリケーション独自のエラー型を定義

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,
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?