Maison développement back-end Golang Comment gérer les erreurs de type personnalisé dans Golang ?

Comment gérer les erreurs de type personnalisé dans Golang ?

Jun 05, 2024 pm 12:47 PM
golang Gestion des erreurs

创建自定义错误类型允许您在 Golang 中处理特定域错误。创建错误类型后,可以使用错误断言来检查错误:检查该错误类型是否与自定义错误类型匹配。如果匹配,则可以访问自定义错误的消息。否则,处理其他类型的错误。

如何处理 Golang 中自定义类型的错误?

如何处理 Golang 中自定义类型的错误

在 Golang 中创建自定义错误类型是定义特定域错误的好方法。这允许您创建包含有关错误的附加信息的错误。

创建自定义错误类型

要创建自定义错误类型,可以使用内置的 errors.New() 函数:

package errors

import "fmt"

type MyError struct {
    msg string
}

func New(msg string) *MyError {
    return &MyError{msg: msg}
}

func (m *MyError) Error() string {
    return fmt.Sprintf("自定义错误:%s", m.msg)
}

Error() 方法返回错误消息。它应该是实现了 error 接口的唯一方法,即它应该返回字符串类型的消息。

处理自定义错误

一旦创建了自定义错误类型,就可以使用 errortype assersions 来检查错误:

func process() error {
    // 调用可能有错误的方法
    if err := doSomething(); err != nil {
        if me, ok := err.(*MyError); ok {
            // 处理自定义错误
            fmt.Println(me.msg)
        } else {
            // 处理其他类型的错误
            return err
        }
    }
    return nil
}

实战案例

以下是一个将数字转换为字符串时可能抛出自定义错误的函数的示例:

func convertToString(num int) (string, error) {
    if num < 0 {
        return "", errors.New("数字必须为非负数")
    }
    return strconv.Itoa(num), nil
}

在调用此函数时,您可以使用错误断言来处理自定义错误:

result, err := convertToString(-1)
if err != nil {
    if me, ok := err.(*errors.MyError); ok {
        fmt.Println(me.msg)  // 输出:数字必须为非负数
    }
}

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment lisez-vous et écrivez-vous des fichiers dans Golang? Comment lisez-vous et écrivez-vous des fichiers dans Golang? Sep 21, 2025 am 01:59 AM

GoprovidessIMPLEAFEFFIENTSFILEHandlingusingheosandbufiopackages.toreAdasmallFileEentirely, useos.readfile, wholoadStheContenTiToMeMorySafelyandAutomAtical ManagesFileOperations.ForlARGEFILSORINCREM

Quelle est la structure structure vide {} utilisée dans Golang Quelle est la structure structure vide {} utilisée dans Golang Sep 18, 2025 am 05:47 AM

Struct {} est une structure sans champ dans GO, qui occupe des octets zéro et est souvent utilisé dans des scénarios où les données ne sont pas nécessaires. Il est utilisé comme signal dans le canal, comme la synchronisation de la goroutine; 2. Utilisé comme collection de types de valeurs de cartes pour réaliser des vérifications de l'existence clé en mémoire efficace; 3. Récepteurs de méthode sans état définissables, adaptés aux fonctions d'injection de dépendance ou d'organisation. Ce type est largement utilisé pour exprimer le débit de contrôle et effacer les intentions.

Comment s'intégrer à une file d'attente de messages comme Rabbitmq à Golang Comment s'intégrer à une file d'attente de messages comme Rabbitmq à Golang Sep 02, 2025 am 07:46 AM

La réponse est d'utiliser la bibliothèque AMQP091-Go pour connecter RabbitMQ, déclarer des files d'attente et des commutateurs, publier en toute sécurité des messages, la consommation de messages avec la QoS et la reconnaissance manuelle, et reconnecter les mécanismes pour obtenir une intégration fiable de la file d'attente de messages dans GO. L'exemple complet comprend les processus de connexion, de production, de consommation et d'erreur, garantissant que les messages ne sont pas perdus et ne soutiennent pas la déconnexion et la reconnexion, et enfin l'exécution de RabbitMQ via Docker pour terminer l'intégration de bout en bout.

Que sont les middleware dans le contexte des serveurs Web Golang? Que sont les middleware dans le contexte des serveurs Web Golang? Sep 16, 2025 am 02:16 AM

Middlewareingowebserversafunction aterttercepthttprequestsboreetheyreachthehandler, permettre à la transformation de la transmission de la transmission; ils enworkbywrapinghandlerstoaddpre-andpost-processingLogicsuchy

Comment gérer les erreurs en php Comment gérer les erreurs en php Sep 07, 2025 am 06:17 AM

ProprimErrorHandlingInphPimproveSrobustnessByMingingDifferRentterRorTys - Parse, Warning, Avis, Fatal, andExceptions - Usingerror_ReporttingAndini_SetTodisplayorLoGerrorsbasedOnenvironment, ImplementingTry-CatchblocksforGraceExceptionhandling, etttingCuumentment, ImplementingTry-CatchblocksforGraceExceptionhandling, etttingCuument, ImplementingTry-CatchblocksForGraceExceptionhandling, etttingCuument, ImplementingTry-CatchblocksForGraceExceptionhandling, etttingCuument, ImplementingTry-CatchSpor

Comment gérez-vous les arrêts gracieux dans une application Golang? Comment gérez-vous les arrêts gracieux dans une application Golang? Sep 21, 2025 am 02:30 AM

GracefulShutdownSingoApplications est en cas de renforcement de la fini auprès, par conduisant en intervenant sur les liens de gits et les procédures de permission, thenstoppingHTTPServersgracetointiaSeshutdownProcedures, thenstoppinghttpServerAlActiveRerequest

Qu'est-ce que CGO et quand l'utiliser à Golang Qu'est-ce que CGO et quand l'utiliser à Golang Sep 21, 2025 am 02:55 AM

CgoenablesGotoCallccode, permettant à Integration avec CLIBRARYSILLOPENSSL, AccessTolow-LevelSystemapis, et performanceOptimization; iTRequireReSIMPORTING "C" WithchedersIncoments, USESC.Function () Syntax, anddemandscarefurmorymanagement.wowever, cogoincinc, cogoincc

Comment créer un maréchaueur / unmarshaller personnalisé pour JSON à Golang Comment créer un maréchaueur / unmarshaller personnalisé pour JSON à Golang Sep 19, 2025 am 12:01 AM

Implémente la sérialisation et la désérialisation JSON des structures GO personnalisables pour Marshaljson et Unmarshaljson, adaptées à la gestion des formats non standard ou compatibles avec les anciennes données. 2. Contrôler la structure de sortie via Marshaljson, comme la conversion des formats de champ; 3. Analyser les données de format spécial via Unmarshaljson, telles que les dates personnalisées; 4. Faites attention à éviter les boucles infinies causées par des appels récursifs et utilisez un alias de type pour contourner les méthodes personnalisées.

See all articles