anyhow
Крейт anyhow
надає багатий тип помилок з підтримкою передачі додаткової контекстної інформації, яка може бути використана для семантичного відстеження дій програми, що призвели до виникнення помилки.
Це можна поєднати зі зручними макросами з thiserror
, щоб уникнути написання реалізацій трейтів явно для користувацьких типів помилок.
Speaker Notes
This slide should take about 5 minutes.
anyhow::Error
по суті є обгорткою навколоBox<dyn Error>
. Таким чином, це знову ж таки, як правило, не є хорошим вибором для загальнодоступного API бібліотеки, але широко використовується в програмах.anyhow::Result<V>
— це псевдонім типу дляResult<V, anyhow::Error>
.- Функціональність, яку надає
anyhow::Error
, може бути знайома розробникам Go, оскільки вона забезпечує поведінку, подібну до типу Goerror
, аResult<T, anyhow::Error>
дуже схожа на Go(T, error)
(з умовою, що тільки один елемент пари є значущим). anyhow::Context
- це трейт, реалізований для стандартних типівResult
таOption
. Використанняanyhow::Context
необхідне для того, щоб дозволити використання.context()
та.with_context()
для цих типів.
Більше інформації для вивчення
anyhow::Error
має підтримку даункастингу, подібно доstd::any::Any
; конкретний тип помилки, що зберігається всередині, може бути витягнутий для вивчення за допомогоюError::downcast
.