Maison > développement back-end > Golang > Pourquoi l'assertion de type échoue-t-elle mais la conversion fonctionne-t-elle avec des types personnalisés dans Go ?

Pourquoi l'assertion de type échoue-t-elle mais la conversion fonctionne-t-elle avec des types personnalisés dans Go ?

Susan Sarandon
Libérer: 2024-11-04 08:41:30
original
933 Les gens l'ont consulté

Why Does Type Assertion Fail But Conversion Work with Custom Types in Go?

Assertions de type nommé et conversions dans Go

Considérez le scénario suivant dans lequel un type personnalisé est défini pour redéfinir un type prédéfini :

<code class="go">type Answer string</code>
Copier après la connexion

Maintenant, essayons d'utiliser ce type personnalisé dans une fonction qui accepte le type prédéfini d'origine :

<code class="go">func acceptMe(str string) {
    fmt.Println(str)
}

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

    // Type assertion fails
    acceptMe(ans.(string)) 
    // Conversion works
    acceptMe(string(ans))
}</code>
Copier après la connexion

L'assertion de type ans.(string) échoue avec l'erreur : assertion de type non valide : ans.(string) (réponse de type non-interface à gauche). En revanche, la conversion string(ans) réussit. Ce comportement soulève la question :

Pourquoi l'assertion de type échoue-t-elle, mais la conversion fonctionne ?

Pour comprendre cela, clarifions que les assertions de type ne fonctionnent que pour les interfaces. Une interface peut avoir des types sous-jacents arbitraires, ce qui rend les assertions de type et les commutateurs de type essentiels. Les assertions de type renvoient une valeur booléenne avec le résultat, indiquant le succès de l'assertion.

En revanche, votre type personnalisé Answer a un type sous-jacent fixe, qui est une chaîne. Puisque vous connaissez déjà les types exacts, vous n'avez pas besoin d'assertions de type car la conversion de Réponse en chaîne réussira toujours. La syntaxe de cette conversion est string(ans).

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