Maison >développement back-end >Golang >Comment Go gère-t-il l'allocation dynamique des tableaux lorsque les tailles des tableaux sont inconnues au moment de la compilation ?
Allocation dynamique de tableaux dans Go : utilisation de tranches
Contrairement à d'autres langages de programmation, les tableaux Go ne sont pas directement alloués au moment de l'exécution. Cela peut poser un défi lorsque la taille d'un tableau doit être déterminée dynamiquement.
Le dilemme des tableaux de taille fixe
Considérez le code suivant qui tente d'allouer un tableau avec une taille d'exécution :
n := 1 var a [n]int
Ce code entraînera une erreur, car Go nécessite que la taille du tableau soit une expression constante connue au moment de la compilation.
La solution : tranches
La solution à ce dilemme est d'utiliser des tranches au lieu de tableaux. Les tranches, contrairement aux tableaux, permettent de déterminer leur taille au moment de l'exécution. La fonction intégrée make() peut être utilisée pour créer une tranche avec une longueur et une capacité spécifiées :
s := make([]int, n, 2*n)
Dans cet exemple, s est une tranche d'entiers avec une longueur initiale de n et une capacité de 2*n. Cela signifie que la tranche peut contenir jusqu'à 2*n éléments avant de devoir être réaffectée.
Pourquoi pas des tableaux ?
Il peut sembler curieux de savoir pourquoi Go ne le fait pas permettre l'allocation directe de tableaux avec des tailles d'exécution. La raison derrière cela est que Go privilégie les tranches plutôt que les tableaux pour la plupart des scénarios. Les tranches offrent la flexibilité de redimensionner dynamiquement et évitent le besoin d'une gestion explicite de la mémoire fournie avec les tableaux.
Par conséquent, l'approche recommandée dans Go consiste à travailler avec des tranches, qui offrent à la fois la flexibilité de l'allocation d'exécution et la simplicité. de gestion automatique de la mémoire.
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!