Maison > développement back-end > Golang > le corps du texte

Quand utiliser des arguments de tranche limités aux types de tranche par rapport aux arguments de tranche génériques dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-24 04:55:30
original
434 Les gens l'ont consulté

When to Use Slice Arguments Constrained to Slice Types vs. Generic Slice Arguments in Go?

Arguments génériques de tranche : comprendre la distinction

Dans Go, la programmation générique introduit des paramètres de type qui permettent aux fonctions d'opérer sur différents types. Un domaine d'intérêt est la distinction entre les arguments de tranche contraints aux types de tranche et les arguments de tranche génériques.

Argument de tranche contraint aux types de tranche

Considérez la fonction slices.Grow avec le premier argument contraint par ~[]E. Cela signifie que le type de cet argument doit être un type slice avec un type d'élément E.

Argument Slice générique

En revanche, considérons la fonction slices.Contains avec le premier argument simplement tapé comme []E. Cela permet n'importe quel type de tranche avec un type d'élément de E.

Différences pratiques

Au départ, il peut sembler que ces deux types d'arguments de tranche se comportent de la même manière, car ils les deux permettent aux fonctions d'accéder aux opérations de tranche telles que l'ajout et la plage. Cependant, il existe une différence subtile mais importante lorsqu'il s'agit de renvoyer une tranche.

Renvoyer une tranche

Si la fonction nécessite de renvoyer une tranche du même type que la tranche d'entrée, vous devez utiliser un argument de tranche limité aux types de tranche (~[]E). Cela garantit que la tranche renvoyée a le type sous-jacent correct.

Exemple

Comparons deux implémentations de Grow() : l'une utilisant ~[]E et l'autre utilisant [ ]E.

<code class="go">func Grow[S ~[]E, E any](s S, n int) S {
    // ...
}

func Grow2[E any](s []E, n int) []E {
    // ...
}</code>
Copier après la connexion

Si nous transmettons une tranche d'un type personnalisé (par exemple, []MyInt), Grow() peut renvoyer une valeur de ce même type. Cependant, Grow2() ne peut renvoyer qu'un type de tranche générique ([]E).

Conclusion

En résumé, si vous devez renvoyer une tranche du même type comme tranche d'entrée, vous devez utiliser un argument de tranche limité aux types de tranche (~[]E). Sinon, utiliser un argument slice générique est suffisant.

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