Comment comparer correctement deux slices en Go pour l'égalité des éléments et de la longueur ?
Bonjour à tous ! J'ai commencé à étudier Go récemment et j'ai rencontré un problème apparemment simple. Je dois comparer deux slices d'entiers pour vérifier s'ils contiennent les mêmes éléments dans le même ordre (c'est-à-dire s'ils sont « profondément égaux »).
En Python, j'écrirais simplement `if list1 == list2:` et tout fonctionnerait. Mais en Go, j'ai découvert que l'opérateur `==` ne fonctionne pas pour les slices ! Le compilateur génère une erreur : `slice can only be compared to nil`.
Voici un exemple de mon code :
```go
package main
import "fmt"
func main() {
a := []int{1, 2, 3}
b := []int{1, 2, 3}
if a == b { // Erreur de compilation !
fmt.Println("Les slices sont égaux")
}
}
```
Je comprends qu'un slice est un type de référence (un descripteur avec un pointeur vers le tableau sous-jacent, la longueur et la capacité). Mais comment comparer correctement le contenu de deux slices ? Dois-je écrire une boucle à chaque fois ? Ou existe-t-il une fonction intégrée ? Peut-être y a-t-il une astuce avec la conversion en chaîne ou via `reflect` ?
Je serais reconnaissant pour