Maison  >  Article  >  développement back-end  >  Quelle est la différence entre les assertions de type et les conversions pour les types personnalisés dans Go ?

Quelle est la différence entre les assertions de type et les conversions pour les types personnalisés dans Go ?

DDD
DDDoriginal
2024-11-06 10:32:02842parcourir

What's the Difference Between Type Assertions and Conversions for Custom Types in Go?

Comprendre les différences entre les assertions de type nommé et les conversions dans Go

Lorsque vous travaillez avec des types personnalisés dans Go, il est essentiel de comprendre les nuances entre les assertions de type nommé et les conversions. Explorons le concept avec un exemple.

Considérez l'extrait de code ci-dessous, dans lequel nous définissons un type personnalisé Answer qui redéfinit le type de chaîne prédéfini :

<code class="go">type Answer string</code>

Nous essayons ensuite d'utiliser Answer dans une fonction qui attend un type de chaîne :

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

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

    // Assertion fails: cannot use ans (type Answer) as type string in function argument
    acceptMe(ans)

    // Type assertion fails as well: invalid type assertion: ans.(string) (non-interface type Answer on left)
    acceptMe(ans.(string))

    // Conversion succeeds.
    acceptMe(string(ans))
}</code>

Pourquoi les assertions échouent ?

Les assertions de type ne s'appliquent qu'aux interfaces. Les interfaces permettent aux types sous-jacents de varier. Pour déterminer le type réel, Go utilise l'assertion de type (x.(T)) ou le commutateur de type (switch x := x.(type)). L'assertion renvoie une valeur booléenne indiquant si l'assertion a réussi.

Dans notre cas, Answer est un type nommé avec un type sous-jacent fixe (chaîne). Puisque le type sous-jacent est connu, aucune assertion n’est nécessaire. La conversion du type de réponse en chaîne à l'aide de string(ans) est suffisante.

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