Maison > développement back-end > Golang > Pourquoi une instance d'erreur nulle n'est-elle pas comparable à zéro ?

Pourquoi une instance d'erreur nulle n'est-elle pas comparable à zéro ?

Barbara Streisand
Libérer: 2024-10-30 06:51:28
original
1028 Les gens l'ont consulté

Why Does a Nil Error Instance Not Compare as Nil?

Les instances d'erreur nulles ne s'affichent pas comme nulles

Pour comprendre les comparaisons d'interfaces, il est crucial de reconnaître qu'elles évaluent à la fois le type et la valeur.

Considérez l'extrait de code :

<code class="go">type Goof struct {}

func (goof *Goof) Error() string {
    return fmt.Sprintf("I'm a goof")
}

func TestError(err error) {
    if err == nil {
        fmt.Println("Error is nil")
    } else {
        fmt.Println("Error is not nil")
    }
}

func main() {
    var g *Goof // nil
    TestError(g) // expect "Error is nil"
}</code>
Copier après la connexion

Ici, nous nous attendons à "L'erreur n'est pas nulle" puisque g est nul. Cependant, en raison des comparaisons d'interfaces, nous obtenons "L'erreur est nulle". En effet, (*Goof)(nil) a un type différent de error(nil).

Pour résoudre ce problème, vous pouvez déclarer var err error au lieu de var g *Goof. Alternativement, si votre fonction renvoie une erreur, renvoyez simplement nil.

Pour plus de précisions, les comparaisons d'interface vérifient si les types sont identiques, et non si un type implémente une interface. En tant que tel, l'exemple suivant démontre que même des interfaces non nulles avec les mêmes données sous-jacentes peuvent être considérées comme inégales en raison de différents types :

<code class="go">package main

import "fmt"

type Bob int

func main() {
    var x int = 3
    var y Bob = 3
    var ix, iy interface{} = x, y
    fmt.Println(ix == iy)
}</code>
Copier après la connexion

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal