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