Contents

errors

Contents

As

func As(err error, target interface{}) bool

第一個參數是現在拿到的 error

會透過呼叫 Unwrap 來比對 err 的第一個錯誤是否和 target 相同 如果對的話,會把 target 設定為 err 並回傳 true 否則回傳 false

範例

err := dec.Decode(dst)
if err != nil {
	var syntaxError *json.SyntaxError
	switch {
	case errors.As(err, &syntaxError):
		return fmt.Errorf("body contains badly-formed JSON (at character %d)", syntaxError.Offset)
	default:
		return err
	}
}

Is

func Is(err error, target error) bool

第一個參數是現在拿到的 error 第二個參數是想要比對的特定 error

比對方式是透過呼叫 Unwrap 逐一拆解來比對是否包含 特定的 error

範例

err := bcrypt.CompareHashAndPassword(p.hash, []byte(plaintextPassword))
if err != nil {
	switch {
	case errors.Is(err, bcrypt.ErrMismatchedHashAndPassword):
		return false, nil
	default:
		return false, err
	}
}