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

Quand utiliser les paramètres de type ~[]E et []E pour les arguments de tranche dans Go ?

Patricia Arquette
Libérer: 2024-10-24 01:47:01
original
860 Les gens l'ont consulté

When to Use ~[]E and []E Type Parameters for Slice Arguments in Go?

Différences entre les arguments génériques des tranches

Dans les tranches du package expérimental de Go, deux fonctions, Contient et Grow, ont des paramètres de type différents pour leurs premiers arguments. Contient prend une tranche d'éléments comparables ([]E), tandis que Grow prend un argument limité aux types de tranches (~[]E).

Considérations pratiques

Alors ces déclarations peuvent paraître équivalentes en pratique, elles diffèrent lorsque vous devez renvoyer une tranche du même type que l'argument d'entrée.

Quand utiliser ~[]Paramètre de type E

Utilisez ~[]E lorsque vous devez renvoyer une tranche du même type (éventuellement nommé) que l'argument. Par exemple, si vous souhaitez créer une fonction générique qui développe une tranche d'un type nommé spécifique :

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

Quand utiliser le []paramètre de type E

Utilisez []E lorsque vous n'avez pas besoin de renvoyer une tranche ou lorsque le renvoi d'une tranche sans nom est acceptable :

<code class="go">func Contains[E comparable](s []E, v E) bool {
    // ...
}</code>
Copier après la connexion

Démonstration

Considérez deux implémentations de Grow ():

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

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

Lors du passage d'un type de tranche personnalisé (ayant une tranche comme type sous-jacent), Grow() peut renvoyer une valeur du même type, tandis que Grow2() ne le peut pas et renvoie une tranche sans nom type.

Sortie :

x2 []int len=1 cap=12
x3 []int len=1 cap=12
y2 main.ints len=1 cap=12
y3 []int len=1 cap=12
Copier après la connexion

Comme vu ci-dessus, Grow2(y, 10) renvoie une tranche d'un type inattendu, ce qui peut ne pas être souhaitable.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!