cerrors

package
v0.0.0-...-0db7fb7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 28, 2025 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ErrUnknown は定義されていないエラー全般を表す
	ErrUnknown errorKind = iota

	// システム/インフラ関連
	ErrSystemInternal    // 内部システムエラー(初期化エラーを含む)
	ErrResourceExhausted // リソース枯渇
	ErrTimeout           // タイムアウト
	ErrUnavailable       // サービス利用不可

	// データベース関連
	ErrDBConnection // DB接続エラー
	ErrDBOperation  // DBオペレーションエラー
	ErrDBConstraint // DB制約違反
	ErrDBNotFound   // レコード未検出
	ErrDBDuplicate  // 重複レコード

	// API/HTTP関連
	ErrAPIRequest         // 不正なAPIリクエスト
	ErrAPIResponse        // APIレスポンスエラー
	ErrRateLimit          // レート制限超過
	ErrServiceUnavailable // 外部サービス利用不可

	// 認証/認可関連
	ErrAuthentication // 認証エラー
	ErrAuthorization  // 認可エラー
	ErrTokenExpired   // トークン期限切れ
	ErrTokenInvalid   // 不正なトークン

	// バリデーション関連
	ErrValidation    // バリデーションエラー(無効な入力を含む)
	ErrInvalidFormat // フォーマットエラー
	ErrMissingField  // 必須フィールド欠落
	ErrInvalidState  // 不正な状態

	// ビジネスロジック関連
	ErrBusinessRule     // ビジネスルール違反
	ErrOperationFailed  // 操作失敗
	ErrInvalidOperation // 不正な操作
	ErrResourceNotFound // リソース未検出

	// --- 新しい ErrorKind は常にこの上↑に追加する ---
	//
	// ErrorKindCount はセンチネル値(sentinel/配列やリストの終端を示す特別な値)であって、上記の要素数として使うためのもので、
	// 最下部にあることで iota によって、要素が追加されるたびにその値が増える.
	// この一番最下部にあるべきものである ErrorKindCount の値と len(constructors) の値をチェックすることで自動的にずれを検知できる
	// ずれ = constructorsへの定義追加漏れ
	ErrorKindCount
)

ErrXxxの定義はすべてここで行う

Variables

This section is empty.

Functions

func AppendCheckpoint

func AppendCheckpoint(err error, options ...CheckpointOption) error

AppendCheckpoint

func AppendMessage

func AppendMessage(err error, msg string) error

AppendMessage は err が *CustomError の場合、AppendMessage の呼び出し元をキャプチャしてコンテキストを追加する

func AppendMessagef

func AppendMessagef(err error, format string, args ...any) error

AppendMessagef は err が *CustomError の場合、AppendMessagef の呼び出し元をキャプチャしてコンテキストを追加する

func SetStackTraceOder

func SetStackTraceOder(order StackTraceOrder)

Types

type CheckpointOption

type CheckpointOption func(*checkpoint)

func WithCheckpointMessage

func WithCheckpointMessage(msg string) CheckpointOption

func WithCheckpointMessagef

func WithCheckpointMessagef(format string, args ...any) CheckpointOption

type CustomError

type CustomError struct {
	// contains filtered or unexported fields
}

CustomError はカスタムエラー型で、エラーコード、詳細メッセージ、実行時コンテキスト情報、原因エラー、およびスタックトレースを保持

func (*CustomError) AddMessage

func (e *CustomError) AddMessage(msg string)

AddMessage は作成後に新しいコンテキストメッセージを追加し、直接の呼び出し元をキャプチャする

func (*CustomError) AddMessagef

func (e *CustomError) AddMessagef(format string, args ...any)

AddMessagef は作成後に新しいコンテキストメッセージを追加し、直接の呼び出し元をキャプチャする

func (*CustomError) Code

func (e *CustomError) Code() string

Code はエラーコードを返す

func (*CustomError) Detail

func (e *CustomError) Detail() string

Detail は静的な詳細情報を返します

func (*CustomError) Error

func (e *CustomError) Error() string

Error は CustomError のコード、詳細メッセージ、追加されたコンテキスト情報、および原因エラーを組み合わせた文字列表現を返す 組み込みの error インターフェースを実装

func (*CustomError) Format

func (e *CustomError) Format(f fmt.State, c rune)

Format は fmt.Formatter を実装し、%+v指定子でスタックトレースの出力をサポートする

func (*CustomError) LogValue

func (e *CustomError) LogValue() slog.Value

LogValue は構造化ロギングのための slog.LogValuer を実装したもの

func (*CustomError) Messages

func (e *CustomError) Messages() []message

Messages はコンテキストメッセージのスライスを返す

func (*CustomError) Unwrap

func (e *CustomError) Unwrap() error

Unwrap は errors.Is/As を処理できるようにする

type Option

type Option func(*CustomError)

Functional Options Pattern

func WithCause

func WithCause(err error) Option

WithCause はエラーの原因(err)を CustomError に設定する

func WithMessage

func WithMessage(msg string) Option

WithMessage はフォーマットなしでコンテキストメッセージを追加する 呼び出し元のファイルと行番号をキャプチャする

func WithMessagef

func WithMessagef(format string, args ...any) Option

WithMessagef はフォーマット付きでコンテキストメッセージを追加する 呼び出し元のファイルと行番号をキャプチャする

type PrettyTextHandler

type PrettyTextHandler struct {
	slog.Handler
	// contains filtered or unexported fields
}

PrettyTextHandler は slog.Handler をラップし、CustomError のスタックトレースを整形して出力する

func NewPrettyTextHandler

func NewPrettyTextHandler(w io.Writer, o *slog.HandlerOptions) *PrettyTextHandler

NewPrettyTextHandler は出力先とハンドラオプションを指定して PrettyTextHandler を生成する

func (*PrettyTextHandler) Handle

func (h *PrettyTextHandler) Handle(ctx context.Context, r slog.Record) error

slog.Handler.Handle のオーバーライド Handle はログレコードを処理し、 CustomError の属性を展開してフラットに追加し、スタックトレースをインデント付きで出力する

type StackTraceOrder

type StackTraceOrder string

StackTraceの順番設定 * Go的には、一般的には逆順(leaf-first) に並べる

  • 例) エラーが発生したフレーム(newest)を先頭 → runtime.goexit (oldest) を最後

* 一番古いフレームを先頭 (root-first) に並べる場合

  • Sentry や一部の APM に JSON を送るとき
  • Sentry の Stack Trace Interface は oldest → newest を要求
  • Python、Node.js などのトレースバックは基本root-first
const (
	StackTraceOrderOldestFirst StackTraceOrder = "oldest_first"
	StackTraceOrderNewestFirst StackTraceOrder = "newest_first"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL