Einführung in Anyhow: Was es ist und warum man es braucht
\n\nAnyhow ist eine der beliebtesten Bibliotheken zur Fehlerbehandlung im Rust-Ökosystem. Sie bietet eine einfache, flexible und bequeme Möglichkeit, mit Fehlern umzugehen, insbesondere in Situationen, in denen Sie keine strenge Fehlertypisierung benötigen oder wenn Sie Prototypen, Skripte, CLI-Tools oder Anwendungen schreiben, bei denen die Entwicklungsgeschwindigkeit wichtiger ist als die perfekte Behandlung jeder einzelnen Fehlerart.
\n\nIn der Standardbibliothek von Rust basiert die Fehlerbehandlung auf dem Typ Result<T, E>, wobei E der Fehlertyp ist. In großen Projekten können die Fehlertypen jedoch unterschiedlich sein: std::io::Error, serde_json::Error, reqwest::Error usw. Diese manuell zu kombinieren ist eine nicht triviale Aufgabe. Anyhow löst dieses Problem, indem es den universellen Typ anyhow::Error bereitstellt, der jeden Fehler speichern kann, der das Trait std::error::Error implementiert.
Hauptvorteile von Anyhow:
\n- \n
- Einfachheit: Minimaler Boilerplate-Code. Sie müssen keine eigenen Fehlertypen für jedes Modul erstellen. \n
- Flexibilität: Jeder Fehler wird automatisch in
anyhow::Errorkonvertiert. \n - Kontext: Sie können mit der Methode
.context()zusätzliche Informationen zu einem Fehler hinzufügen. \n - Praktische Makros:
bail!undensure!ermöglichen die schnelle Rückgabe von Fehlern. \n - Kompatibilität: Funktioniert mit jeder Bibliothek, die
Resultzurückgibt. \n
Anyhow ist nicht für Bibliotheken gedacht (wo besser thiserror verwendet wird), aber ideal für Anwendungen, Binärdateien und Tests.
Installation
\n\nAnyhow ist eine Bibliothek für Rust, daher erfolgt die Installation über den Paketmanager cargo. Fügen Sie die folgende Zeile zu Ihrer Cargo.toml-Datei hinzu:
[dependencies]\nanyhow = "1.0"\n\nFühren Sie anschließend den Befehl cargo build aus, und die Bibliothek wird heruntergeladen und kompiliert. Wenn Sie Rust 2021 Edition oder neuer verwenden, sind keine zusätzlichen Einstellungen erforderlich.
Um Anyhow im Code zu verwenden, reicht es, es zu importieren:
\n\nuse anyhow::{Result, anyhow, bail, Context};\n\nSchnellstart: Erstes Beispiel
\n\nSchreiben wir ein einfaches Programm, das eine Datei liest, sie als JSON parst und das Ergebnis ausgibt. Wenn in einem Schritt ein Fehler auftritt, geben wir ihn einfach nach oben weiter.
\n\nuse anyhow::Result;\nuse std::fs;\n\nfn main() -> Result<()> {\n // Dateiinhalt lesen\n let data = fs::read_to_string("config.json")?;\n \n // Als JSON parsen (serde_json verwenden)\n let config: serde_json::Value = serde_json::from_str(&data)?;\n \n println!("Konfiguration: {}", config);\n Ok(())\n}\n\nBeachten Sie das ? – den Fehlerweitergabe-Operator. Wenn read_to_string oder from_str einen Fehler zurückgeben, wird dieser automatisch in anyhow::Error umgewandelt und die Funktion wird mit diesem Fehler beendet. Alles einfach und elegant.
Wichtige Methoden und Funktionen von Anyhow
\n\nNachfolgend sind 10 wichtige Methoden und Funktionen der Anyhow-Bibliothek mit detaillierter Beschreibung und Beispielen aufgeführt.
\n\n1. anyhow!() — Erstellen eines beliebigen Fehlers
\nWas es tut: Das Makro anyhow! erstellt einen neuen Fehler vom Typ anyhow::Error aus einem String oder einer formatierten Nachricht. Es ist das Äquivalent zu format!, aber für Fehler.
Parameter: Akzeptiert einen String mit Formatierung (wie format!) oder jeden Typ, der Display implementiert.
Beispiel:
\nuse anyhow::{anyhow, Result};\n\nfn validate_age(age: i32) -> Result<()> {\n if age < 0 {\n Auch in der Bibliothek
Nodemailer — E-Mail-Versand mit TypeScript
C++ Benchmark: Vollständige Anleitung mit Beispielen
Autorisierung und Authentifizierung in PHP: Vollständiger Leitfaden mit Beispielen