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