Dernière mise à jour : 26 décembre 2022
Construisez des applications Go plus rapidement avec du code testé pré-construit.
Découvrez mon cours sur le Accédez à la bibliothèque standard aujourd’hui!
Vous pouvez suivre ce cours pendant gratuit. Cliquez ici pour échanger !
Slices in Go peut être à la fois génial et déroutant. C’est un type de données funky à coup sûr mais extrêmement puissant une fois que vous maîtrisez leur utilisation. Aujourd’hui, nous allons parler de ce qu’ils sont, de la raison pour laquelle vous utiliseriez une tranche dans Go et de certaines des choses intéressantes que vous pouvez faire avec.
Qu’est-ce qu’une tranche ?
Une tranche est un type de données dans Go qui pointe vers un tableau sous-jacent. Considérez-le comme une “vue” d’un tableau. Pour apprécier ce que fait une tranche, vous devez savoir comment fonctionne un tableau.
Un tableau est un regroupement de valeurs d’un type particulier.
Par exemple:
Cela déclare un groupe de 10 entiers. Vous pouvez ajouter des éléments comme ceci :
Ou vous pouvez initialiser le tableau avec des valeurs :
someints := [5]int{26, 44, 67, 12, 33}
Ils ne doivent pas nécessairement être des nombres entiers. Vous pouvez également avoir des tableaux de chaînes :
someints := [5]string{"Barts", "Yorkie", "Sholtzy", "Fisky", "Boomtown"}
Et bien sûr, chacun a un index et une valeur que vous pouvez afficher :
Des trucs faciles.
Alors pourquoi n’utilisons-nous pas des tableaux pour tout ?
Dans la programmation Go, vous utiliserez (et devriez) utiliser des tableaux tout le temps. Ce sont des types de données ultra-rapides et ils sont parfaits lorsque vous savez précisément de combien d’éléments vous avez besoin à l’avance.
C’est une contrainte des tableaux. Vous devez savoir à l’avance de combien d’espace vous aurez besoin. Lorsque vous créez un tableau, de l’espace est alloué pour vos données, que vous l’utilisiez ou non.
Par exemple, cela fonctionne :
someints := [10]string{"Barts", "Yorkie", "Sholtzy", "Fisky", "Boomtown"}
Vous remarquerez maintenant que votre tableau contient dix éléments :
La longueur du tableau est de 10, quelles que soient les données qu’il contient.
Vous pouvez ajouter à ce tableau :
Et il s’ajoutera à votre liste.
Cependant, vous êtes limité aux dix éléments que vous avez déclarés dans votre tableau. Si vous essayez de faire ceci :
Vous obtiendrez une erreur :
Ce n’est pas grave. Vous pouvez toujours recréer un nouveau tableau avec plus d’éléments et transférer le contenu du tableau existant dans le nouveau.
Mais, les tranches le font pour vous. D’où la raison pour laquelle nous voudrions les utiliser. Nous allons jeter un coup d’oeil.
Comment utiliser les tranches
L’utilisation d’une tranche est presque identique à un tableau. Cependant, une tranche devient un tableau typé dynamiquement.
Regardons le tableau que nous venons de créer. Nous allons vérifier la longueur du tableau :
fmt.Printf("Length of someints: %v\n", len(someints))
Cela nous indique que la longueur est de dix, mais nous n’avons que cinq noms là-dedans. Alors changeons-le en une tranche.
someints := []string{"Barts", "Yorkie", "Sholtzy", "Fisky", "Boomtown"}
Il n’y a pas beaucoup de différence dans la syntaxe ou la façon dont nous l’utilisons. Mais maintenant, quand nous l’affichons :
C’est une longueur exacte.
De plus, nous pouvons ajouter autant d’éléments que nous le voulons :
someints = append(someints, "Jonesy", "Shoresy", "Wayne", "Katy")
Et notre tranche s’est agrandie pour s’adapter aux nouvelles valeurs :
Et je viens de remarquer que j’ai toujours la tranche nommée someints
bien qu’ils ne soient pas des nombres entiers.
Nous pouvons ajouter et soustraire des éléments à volonté sans avoir à créer un nouveau tableau. Au fur et à mesure que la tranche change, le compilateur crée et recrée automatiquement le tableau sous-jacent pour vous.
Considérez donc une tranche comme un tableau de taille dynamique
Mais ce n’est pas tout!
C’est amusant de travailler avec des tranches. Vous pouvez même faire avec un tranche d’un tranche.
Donc, si je crée une tranche comme celle-ci :
chirpers := []string{"Barts", "Yorkie", "Sholtzy", "Fisky", "Boomtown"}
Je peux sélectionner n’importe quel élément directement :
Ou une tranche d’éléments. Vous pouvez sélectionner l’élément de départ et l’élément de fin du tableau :
avec le nom de la tranche[ starting index ][ ending index ]
fmt.Println(chirpers[2:5])
Si vous souhaitez sélectionner le début ou la fin de la tranche comme point de départ ou point de fin, vous pouvez omettre cette valeur :
fmt.Println(chirpers[:5])
Vous pouvez l’utiliser pour obtenir le dernier élément de la tranche (après tout, c’est dynamique) :
fmt.Println(chirpers[(len(chirpers) - 1):])
Ajouter à une tranche
L’ajout d’éléments à une tranche est simple :
chirpers = append(chirpers, "Shoresy")
Nous pouvons utiliser append pour ajouter autant d’éléments que nous le voulons.
Supprimer un élément d’une tranche
Il n’y a pas de fonctions intégrées dans Go pour supprimer un élément d’une tranche.
Mais vous pouvez utiliser append pour décaler les valeurs d’un élément particulier, de sorte que l’élément que vous souhaitez supprimer soit remplacé par la valeur suivante dans la tranche.
Disons que nous voulons supprimer Fisky (à l’élément 3):
chirpers = append(chirpers[:3], chirpers[4:]...)
Ici, nous ajoutons l’élément trois avec l’élément quatre et les valeurs qui le suivent.
Il s’agit essentiellement de déplacer toutes les valeurs sur un élément. Cela peut sembler maladroit et aura un coût en termes de performances, mais il est utile de se rappeler qu’il existe toujours un tableau qui sauvegarde cette tranche.
Conclusion : les tranches sont excellentes ! La plupart du temps
Nous avons donc examiné les tranches et appris comment elles sont essentiellement une « vue » d’un tableau. Ils sont utiles lorsque vous avez besoin d’un tableau de taille dynamique ou si vous souhaitez extraire facilement des parties spécifiques d’un tableau.
Je viens de gratter la surface des tranches et ce que vous pouvez en faire. Je les ai utilisés partout, et ils sont très pratiques. L’abstraction supplémentaire a une différence de performances, mais elle est minime la plupart du temps.
Si vous souhaitez en savoir plus sur les tranches, les tableaux ou Go en général, consultez ceci. C’est une excellente explication de la façon dont ils travaillent ensemble.
Vous pouvez également tester vos compétences Go actuelles et voir où vous vous situez.
Merci d’avoir lu!
Vous voulez devenir un programmeur Go expert ?
Vous pouvez booster vos compétences en quelques week-ends en suivant ces cours de Go de haute qualité dispensés par les meilleurs experts !
Nous avons plus de 30 heures de cours de Go que vous pouvez suivre dès maintenant ! Vous pouvez l’essayer gratuitement pendant 10 jours.