


Allez - Erreur. Impossible de décompresser le type d'erreur personnalisé
L'éditeur php Xigua vous présentera : Dans le langage Go, lorsque nous utilisons des types d'erreur personnalisés, nous rencontrons parfois le problème de "Erreur. Impossible de décompresser les types d'erreur personnalisés". Ce problème se produit généralement lorsque nous essayons de transmettre des types d'erreur personnalisés à d'autres fonctions ou méthodes. Même si cela peut sembler un problème délicat, il existe en réalité plusieurs façons de le résoudre. Dans cet article, nous explorerons les causes de ce problème et proposerons des solutions pour vous aider à résoudre ce problème.
Contenu de la question
J'essaie d'utiliser les erreurs du package go stdlib pour décompresser un type d'erreur personnalisé à l'aide de errors.as
mais il semble que la vérification échoue et je ne peux pas extraire l'erreur sous-jacente.
J'ai extrait un exemple minimal reproductible :
package main import ( "errors" "fmt" ) type myError struct { err error } func (m myError) Error() string { return fmt.Sprintf("my error: %s", m.err) } func retError() error { return &myError{errors.New("wrapped")} } func main() { var m myError if err := retError(); errors.As(err, &m) { fmt.Println("unwrapped", m.err) } else { fmt.Println(err) } }
https://go.dev/play/p/i7bnk4-rdib - Exemples sur le terrain de jeu en déplacement. S'il est lancé, il affiche "mon erreur : emballage" au lieu de l'"emballage non emballé" attendu.
errors.as
文档中的示例有效,我似乎无法理解我做错了什么 - 我将 *myerror
传递给 errors.as
,这似乎是正确的(因为传递了 myerror
引发恐慌:target 必须是非零指针
L'exemple dans la documentation fonctionne, je n'arrive pas à comprendre ce que je fais de mal - je passe *myerror
à ce qui semble être correct (car en passant myerror< /code> lance Panic : <code>la cible doit être un pointeur différent de zéro
, c'est normal). Solutionau lieu de :
func reterror() error { return &myerror{errors.new("wrapped")} }
func retError() error { return myError{errors.New("wrapped")} }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Grâce à sa haute concurrence, son efficacité et sa nature multiplateforme, le langage Go est devenu un choix idéal pour le développement d'applications mobiles pour l'Internet des objets (IoT). Le modèle de concurrence de Go atteint un degré élevé de concurrence grâce aux goroutines (coroutines légères), ce qui convient à la gestion d'un grand nombre d'appareils IoT connectés en même temps. La faible consommation de ressources de Go permet d'exécuter efficacement des applications sur des appareils mobiles avec des ressources informatiques et un stockage limités. De plus, la prise en charge multiplateforme de Go permet aux applications IoT d’être facilement déployées sur une variété d’appareils mobiles. Le cas pratique montre l'utilisation de Go pour créer une application de capteur de température BLE, communiquant avec le capteur via BLE et traitant les données entrantes pour lire et afficher les relevés de température.

Avantages du framework Golang Golang est un langage de programmation simultanée hautes performances particulièrement adapté aux microservices et aux systèmes distribués. Le framework Golang facilite le développement de ces applications en fournissant un ensemble de composants et d'outils prêts à l'emploi. Voici quelques-uns des principaux avantages du framework Golang : 1. Hautes performances et concurrence : Golang lui-même est connu pour ses hautes performances et sa concurrence. Il utilise des goroutines, un mécanisme de thread léger qui permet l'exécution simultanée de code, améliorant ainsi le débit et la réactivité des applications. 2. Modularité et réutilisabilité : le framework Golang encourage la modularité et le code réutilisable. En divisant l'application en modules indépendants, vous pouvez facilement maintenir et mettre à jour le code

Le langage Go est largement utilisé dans les scénarios IoT blockchain. Ses principaux avantages incluent : la rédaction de contrats intelligents et la gestion des règles et opérations du flux de marchandises sur la blockchain. Développez des applications pour gérer les transactions d’actifs et suivre l’emplacement et l’état des actifs. Efficace, simultané et open source, adapté au traitement de grandes quantités de données et facile à étendre et à personnaliser.

En langage Go, les dépendances des packages sont gérées via des instructions d'importation. Il existe deux types de dépendances de packages dans le langage Go : les dépendances directes et les dépendances indirectes. Le système de modules Go gère les dépendances des packages via l'outil gomod, y compris des tâches telles que la modularisation, le contrôle de version des dépendances, ainsi que le téléchargement et l'installation des dépendances.

Le modèle producteur-consommateur permet aux producteurs de mettre des données en cache, tandis que les consommateurs peuvent simultanément en extraire des données pour les traiter. Dans Go, les tubes sont un mécanisme de communication qui implémente ce modèle : Créez un tube : make(chanT), où T est le type de données de transfert. Fonction producteur : mettre les données dans un tube (ch

Les tubes sont un mécanisme de communication sans tampon qui peut être utilisé pour créer des tâches parallèles : Créer un tube : ch:=make(chanint) Envoyer des données : ch

Le pipeline du langage Go est utilisé pour transférer des données entre les goroutines et peut être utilisé selon les étapes suivantes : Créer un pipeline : make(chanint) Envoyer des données : canal<-data Recevoir des données : data:=<-channel Créer un canal tampon : make(chanint,10 ) (la taille du tampon est de 10) Cas pratique : calculez simultanément la somme des carrés entiers et utilisez des tuyaux pour transférer les résultats dans goroutine

Le langage Go est devenu le premier choix pour le développement de blockchain en raison de ses hautes performances, de son évolutivité et de sa facilité d'utilisation. Il est utilisé pour implémenter les composants clés d'Hyperledger Fabric (code chaîne, mécanisme de consensus) et pilotera le développement d'applications décentralisées, d'IoT et de solutions d'interopérabilité à l'avenir.
