Skip to content

定数とエラー

デフォルト設定定数

定数説明
DefaultMaxInputSizeint52428800最大入力サイズ (50MB)
DefaultMaxCacheEntriesint2000キャッシュ最大エントリ
DefaultWorkerPoolSizeint4ワーカープールサイズ
DefaultCacheTTLtime.Duration1hキャッシュ有効期限
DefaultCacheCleanuptime.Duration5mキャッシュクリーンアップ間隔
DefaultMaxDepthint500最大 DOM 深度
DefaultProcessingTimeouttime.Duration30s処理タイムアウト時間

監査定数

監査イベントタイプ

定数説明
AuditEventBlockedTag"blocked_tag"ブロックされたタグ
AuditEventBlockedAttr"blocked_attr"ブロックされた属性
AuditEventBlockedURL"blocked_url"ブロックされた URL
AuditEventInputViolation"input_violation"入力違反
AuditEventDepthViolation"depth_violation"深度違反
AuditEventTimeout"timeout"処理タイムアウト
AuditEventEncodingIssue"encoding_issue"エンコーディングの問題
AuditEventPathTraversal"path_traversal"パストラバーサルの試行

監査レベル

定数説明
AuditLevelInfoAuditLevel"info"情報レベル
AuditLevelWarningAuditLevel"warning"警告レベル
AuditLevelCriticalAuditLevel"critical"重大レベル

INFO

監査システムの詳細な使い方と Sink タイプは 監査システム を参照してください。

センチネルエラー

エラーメッセージ説明
ErrInputTooLargehtml: input size exceeds maximum入力がサイズ制限を超過
ErrInvalidHTMLhtml: invalid HTML無効な HTML コンテンツ
ErrProcessorClosedhtml: processor closedプロセッサがクローズ済み
ErrMaxDepthExceededhtml: max depth exceeded最大深度を超過
ErrInvalidConfightml: invalid config無効な設定
ErrProcessingTimeouthtml: processing timeout exceeded処理タイムアウト
ErrFileNotFoundhtml: file not foundファイルが見つからない
ErrInvalidFilePathhtml: invalid file path無効なファイルパス
ErrInternalPanichtml: internal panic recovered内部パニックからリカバリ
ErrMultipleConfigshtml: at most one Config may be providedConfig は最大 1 つまで

エラータイプ

InputError

入力関連エラー。サイズ情報を含みます。

go
type InputError struct {
    Op       string // 操作名
    Size     int    // 実際のサイズ
    MaxSize  int    // 最大制限
    InputErr error  // 元のエラー
}

func (e *InputError) Error() string
func (e *InputError) Unwrap() error // → InputErr(非 nil の場合)または ErrInputTooLarge

ConfigError

設定検証エラー。フィールド情報を含みます。

go
type ConfigError struct {
    Field   string // フィールド名
    Value   any    // 無効な値
    Message string // エラーの説明
}

func (e *ConfigError) Error() string
func (e *ConfigError) Unwrap() error // → ErrInvalidConfig

FileError

ファイル操作エラー。パスを自動的に切り詰めて漏洩を防止します。

go
type FileError struct {
    Op      string // 操作名
    Path    string // ファイルパス
    FileErr error  // 元のエラー
}

func (e *FileError) Error() string        // 安全な出力(パスを切り詰め)
func (e *FileError) SafePath() string     // ファイル名のみ返す
func (e *FileError) Unwrap() error        // → ErrFileNotFound | 元のエラー | ErrInvalidFilePath
func (e *FileError) MarshalJSON() ([]byte, error) // JSON シリアライズ時にもパスを切り詰める (API レスポンスでの漏洩を防止)

安全なパス

FileError.Error()SafePath() はどちらも切り詰められた安全なパス(ファイル名のみ)を返し、パスの漏洩を防止します。デバッグ時に完全なパスが必要な場合は Path フィールドに直接アクセスできます。

エラー処理パターン

go
result, err := html.Extract(data)
if err != nil {
    var inputErr *html.InputError
    var configErr *html.ConfigError
    var fileErr *html.FileError

    switch {
    case errors.Is(err, html.ErrInputTooLarge):
        // 入力が大きすぎる
    case errors.Is(err, html.ErrInvalidHTML):
        // 無効な HTML
    case errors.Is(err, html.ErrFileNotFound):
        // ファイルが存在しない
    case errors.As(err, &inputErr):
        fmt.Printf("サイズ %d が制限 %d を超過\n", inputErr.Size, inputErr.MaxSize)
    case errors.As(err, &configErr):
        fmt.Printf("設定フィールド %s が無効: %s\n", configErr.Field, configErr.Message)
    case errors.As(err, &fileErr):
        fmt.Printf("ファイル: %s\n", fileErr.SafePath())
    }
}