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 ler_nome_usuario(caminho: &str) -> Result<String> { let mut nome_usuario = String::with_capacity(100); fs::File::open(caminho) .with_context(|| format!("Falha ao abrir {caminho}"))? .read_to_string(&mut nome_usuario) .context("Falha ao ler")?; if nome_usuario.is_empty() { bail!("Nome de usuĂĄrio nĂŁo encontrado em {caminho}"); } Ok(nome_usuario) } fn main() { //fs::write("config.dat", "").unwrap(); match ler_nome_usuario("config.dat") { Ok(nome_usuario) => println!("nome_usuario: {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.