Adicionando Contexto aos Erros
O crate
anyhow Ă© amplamente usado e pode lhe ajudar a adicionar informaçÔes contextuais aos seus erros, permitindo que vocĂȘ tenha menos tipos de erros personalizados:
use std::{fs, io}; use std::io::Read; use anyhow::{Context, Result, bail}; fn read_username(path: &str) -> Result<String> { let mut username = String::with_capacity(100); fs::File::open(path) .with_context(|| format!("Falha ao abrir {caminho}"))? .read_to_string(&mut username) .context("Falha ao ler")?; if username.is_empty() { bail!("Nome de usuĂĄrio nĂŁo encontrado em {path}"); } Ok(username) } fn main() { //fs::write("config.dat", "").unwrap(); match read_username("config.dat") { Ok(username) => println!("Nome do usuĂĄrio: {nome_usuario}"), Err(err) => println!("Erro: {err:?}"), } }
anyhow::Result<V>
Ă© um apelido de tipo paraResult<V, anyhow::Error>
.anyhow::Error
Ă© essencialmente um wrapper em torno deBox<dyn Error>
. Como tal, geralmente nĂŁo Ă© uma boa escolha para a API pĂșblica de uma biblioteca, mas Ă© amplamente utilizado em aplicaçÔes.- O tipo de erro real dentro dele pode ser extraĂdo para exame, se necessĂĄrio.
- A funcionalidade fornecida por
anyhow::Result<T>
pode ser familiar para desenvolvedores Go, pois fornece padrÔes de uso e ergonomia semelhantes a(T, error)
de Go.