Maison  >  Article  >  développement back-end  >  Pourquoi l’assertion de type échoue-t-elle avec les types personnalisés dans Go ?

Pourquoi l’assertion de type échoue-t-elle avec les types personnalisés dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 08:49:30722parcourir

Why Does Type Assertion Fail with Custom Types in Go?

Assertions de types nommés et conversions dans Go

Lors de la définition de types personnalisés dans Go, il est possible de redéfinir des types prédéfinis avec un nouveau nom. Toutefois, lorsque vous tentez d'utiliser ces types personnalisés dans des fonctions qui attendent le type prédéfini, des erreurs peuvent survenir. Examinons les raisons de ces erreurs et explorons les solutions.

Considérez le code suivant :

<code class="go">type Answer string

func acceptMe(str string) {
    fmt.Println(str)
}

func main() {
    var ans Answer = "hello"

    // Cannot use ans (type Answer) as type string in function argument
    acceptMe(ans)

    // Invalid type assertion: ans.(string) (non-interface type Answer on left)
    acceptMe(ans.(string))

    // Works, but why?
    acceptMe(string(ans))
}</code>

Pourquoi l'assertion de type échoue

Type les assertions ne fonctionnent que pour les interfaces. Les interfaces peuvent avoir n'importe quel type sous-jacent, permettant une assertion de type ou un changement de type. Cependant, dans ce cas, Answer est un type personnalisé avec un seul type sous-jacent, string. Il n'est pas nécessaire d'assertion de type puisque la conversion vers le type sous-jacent est garantie de réussir.

Pourquoi la conversion fonctionne

Les conversions, en revanche, peuvent être effectuées entre des types qui ont une relation connue, comme c'est le cas avec Answer et string. La syntaxe string(ans) convertit explicitement le type de réponse en type de chaîne sous-jacent.

Conclusion

Il est important de comprendre la distinction entre les assertions de type et les conversions. Les assertions de type doivent être utilisées avec des interfaces pour vérifier dynamiquement le type sous-jacent. Les conversions, en revanche, sont utilisées pour effectuer une conversion explicite entre des types ayant des relations connues. Dans le cas de Answer et de string, la conversion est l'approche recommandée car elle fournit un moyen prévisible et clair d'interagir avec le type sous-jacent.

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:
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