Souvent, lorsqu'on traite des tranches dans Go, il est nécessaire de déterminer si un élément spécifique existe dans la tranche. Bien qu'il n'existe pas de méthode intégrée pour cela, une solution générique peut être obtenue en utilisant la réflexion. Bien que la réflexion offre un moyen de travailler avec des objets de manière dynamique, elle a un coût en termes de performances.
Le package Reflect fournit un moyen d'inspecter et de manipuler les données au moment de l'exécution. Pour les tranches, nous pouvons utiliser réfléchissant.ValueOf(slice) pour obtenir un reflet.Value représentant la tranche. À partir de là, nous pouvons vérifier s'il s'agit d'une tranche en vérifiant son Kind() et parcourir ses éléments en utilisant Len() et Index().
La solution générique utilisant la réflexion est considérablement plus lent que ses équivalents non génériques. Une fonction personnalisée qui vérifie spécifiquement un type d'élément donné entraînera de bien meilleures performances.
Le code suivant montre une implémentation de la fonction générique Contains() et d'une fonction non générique. ContainsNonGeneric() à titre de comparaison :
<code class="go">import "reflect" func Contains(slice, elem interface{}) bool { sv := reflect.ValueOf(slice) if sv.Kind() != reflect.Slice && sv.Kind() != reflect.Array { return false } for i := 0; i < sv.Len(); i++ { if elem == sv.Index(i).Interface() { return true } } return false } func ContainsNonGeneric(slice []int, elem int) bool { for _, i := range slice { if i == elem { return true } } return false } func main() { si := []int{3, 4, 5, 10, 11} ss := []string{"hello", "world", "foo", "bar"} fmt.Println(Contains(si, 3)) fmt.Println(Contains(si, 100)) fmt.Println(Contains(ss, "hello")) fmt.Println(Contains(ss, "baz")) }</code>
Bien que la fonction générique Contains() fournisse un moyen de vérifier l'existence d'un élément dans des tranches de tout type, il est crucial de prendre en compte les implications en termes de performances. . Pour des performances optimales, des fonctions personnalisées avec des vérifications de type spécifiques doivent être utilisées autant que possible.
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!