anyhow
Error aplikasi yang fleksibel
anyhow adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Error Aplikasi yang Fleksibel
Dalam kode aplikasi, Anda sering kali hanya ingin meneruskan error ke atas beserta konteksnya, tanpa mendefinisikan enum bertipe untuk setiap error. Crate anyhow menyediakan satu jenis error yang mudah untuk kebutuhan tersebut.
Menambahkan anyhow
Tambahkan sebagai dependensi. Crate ini cocok dipasangkan dengan thiserror: thiserror untuk pustaka, anyhow untuk biner.
[dependencies]
anyhow = "1.0"Alias anyhow::Result
anyhow::Result<T> merupakan kependekan dari Result<T, anyhow::Error>. Jenis Error dapat menampung error apa pun yang mengimplementasikan std::error::Error.
use anyhow::Result;
fn load() -> Result<String> {
let text = std::fs::read_to_string("config.txt")?;
Ok(text)
}Konversi Otomatis
Operator ? secara otomatis mengonversi error standar apa pun menjadi anyhow::Error, sehingga Anda dapat mencampur berbagai jenis error dengan bebas.
use anyhow::Result;
fn parse_file(path: &str) -> Result<i32> {
let text = std::fs::read_to_string(path)?; // io error
let n: i32 = text.trim().parse()?; // parse error
Ok(n)
}Menambahkan Konteks
Metode .context() menambahkan pesan yang mudah dipahami manusia ke sebuah error, sehingga membentuk rantai yang mudah dibaca saat terjadi kegagalan.
use anyhow::{Context, Result};
fn read_config(path: &str) -> Result<String> {
let text = std::fs::read_to_string(path)
.context("failed to read config file")?;
Ok(text)
}Konteks yang Ditunda
Gunakan with_context saat pembuatan pesan membutuhkan biaya besar atau memerlukan data runtime; closure hanya dijalankan saat terjadi error.
use anyhow::{Context, Result};
fn open(path: &str) -> Result<String> {
std::fs::read_to_string(path)
.with_context(|| format!("could not open {path}"))
}Membuat Error Ad-hoc
Makro anyhow! membuat error dari sebuah pesan, sedangkan bail! segera mengembalikan error tersebut.
use anyhow::{anyhow, bail, Result};
fn check(age: i32) -> Result<()> {
if age < 0 {
bail!("age cannot be negative");
}
if age > 150 {
return Err(anyhow!("age {age} is implausible"));
}
Ok(())
}Menggunakan ensure!
ensure! mirip dengan assert!, tetapi mengembalikan error alih-alih menyebabkan panic.
use anyhow::{ensure, Result};
fn divide(a: i32, b: i32) -> Result<i32> {
ensure!(b != 0, "division by zero");
Ok(a / b)
}anyhow dalam main
Kembalikan anyhow::Result<()> dari main untuk menampilkan rantai error dengan format yang baik saat terjadi kegagalan.
use anyhow::Result;
fn main() -> Result<()> {
let text = std::fs::read_to_string("data.txt")?;
println!("{text}");
Ok(())
}Memeriksa Penyebab
Meskipun anyhow::Error bersifat opak, Anda tetap dapat memeriksanya. downcast_ref memulihkan jenis error konkret saat Anda perlu membuat percabangan berdasarkan jenis tersebut.
use anyhow::Result;
fn report(err: anyhow::Error) {
if let Some(io) = err.downcast_ref::<std::io::Error>() {
println!("io error: {io}");
} else {
println!("other error: {err}");
}
}thiserror vs anyhow
Pedoman umum:
- thiserror — pustaka, error bertipe yang dapat dicocokkan oleh pemanggil
- anyhow — aplikasi, cukup teruskan beserta konteksnya
Anda dapat mengonversi error thiserror menjadi anyhow dengan ? secara mulus.
Pemeriksaan Singkat
Metode anyhow mana yang menambahkan pesan deskriptif ke error saat error tersebut diteruskan?
Ringkasan
Anda telah mempelajari crate anyhow:
anyhow::Result<T>menggunakan satu jenis error yang fleksibel?secara otomatis mengonversi error standar apa pun.context()/with_context()menambahkan pesan yang mudah dibacaanyhow!,bail!, danensure!membuat error- Paling cocok untuk kode aplikasi (biner)
Pertanyaan yang Sering Diajukan
Apakah pelajaran “anyhow” gratis?
Ya — teks lengkap “anyhow” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “anyhow”?
Error aplikasi yang fleksibel Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?
Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “anyhow” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?
Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.