


Pourquoi la suppression des premiers éléments d'une tranche dans Go modifie-t-elle sa capacité, mais pas la suppression du dernier??
Nov 04, 2024 am 02:30 AMComprendre les changements de capacité des tranches?: suppression du premier et du dernier élément
Dans Go, les tranches sont une structure de données qui fournit un élément modifiable et de taille dynamique. vue d'un tableau sous-jacent. Lorsque la capacité d'une tranche change, cela affecte le tableau sous-jacent et la gestion de la mémoire.
Considérez le code Go suivant?:
<code class="go">package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] printSlice(s) // Drop its first two values. s = s[2:] printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }</code>
Pourquoi la capacité de la tranche change-t-elle lorsque les deux premiers éléments sont supprimés, mais pas lorsque les deux derniers sont supprimés??
Pour répondre à cette question, nous devons comprendre comment les tranches Go sont implémentées. Il s'agit d'une structure avec trois champs?:
- array?: un pointeur vers le tableau sous-jacent
- len?: le nombre d'éléments dans la tranche
- cap?: la capacité de la tranche, ou le nombre maximum d'éléments qu'elle peut contenir
Lorsque les deux derniers éléments de la tranche sont déposés (s = s[:len(s)-2]), le champ len est décrémenté, mais le pointeur de tableau et le champ cap restent les mêmes. En effet, le tableau sous-jacent n'est pas modifié et la tranche fait toujours référence au même tableau.
Cependant, lorsque les deux premiers éléments de la tranche sont supprimés (s = s[2:]), un nouveau un tableau est créé pour contenir la nouvelle tranche. Le champ len est décrémenté, le pointeur du tableau est mis à jour pour pointer vers le nouveau tableau et le champ cap est également décrémenté pour refléter la taille plus petite du nouveau tableau.
Conclusion
La capacité d'une tranche change lorsque les premiers éléments sont supprimés car un nouveau tableau sous-jacent doit être créé pour accueillir la tranche. Cela n'est pas nécessaire lorsque les derniers éléments sont supprimés car le tableau existant peut toujours être utilisé.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

La manipulation efficace de JSON dans GO nécessite une attention aux étiquettes structurelles, aux champs facultatifs et à l'analyse dynamique. Utilisez la balise struct pour personnaliser le nom de la clé JSON, tel que JSON: "nom"; Assurez-vous que les champs sont exportés pour accès par le package JSON. Utilisez des pointeurs ou des balises omitempty lors du traitement des champs facultatifs pour distinguer les valeurs non à l'instruction des zéros explicites. Lors de l'analyse de JSON inconnue, l'interface Map [String] {} peut être utilisée pour extraire des données avec des assertions de type. Le numéro par défaut sera analysé comme Float64. JSON.Marshalindent peut être utilisé pour embellir la production pendant le débogage, mais l'environnement de production devrait éviter la mise en forme inutile. La ma?trise de ces techniques peut améliorer la robustesse et la capacité de votre code

Les programmes GO peuvent en effet interagir avec le code C via CGO, ce qui permet à Go d'appeler directement les fonctions C. Lorsque vous utilisez CGO, importez simplement le pseudo-package "C" et intégrez le code C dans les commentaires ci-dessus de la ligne d'importation, tels que l'inclusion de définitions de fonctions et les appeler. De plus, la bibliothèque C externe peut être liée en spécifiant les indicateurs de liaison tels que #cgoldflags. Cependant, il existe de nombreux problèmes auxquels faire attention lors de l'utilisation de CGO: 1. La gestion de la mémoire doit être traitée manuellement et ne peut pas compter sur la collecte des ordures Go; 2. Les types GO peuvent ne pas correspondre aux types C, et des types tels que C.INT doivent être utilisés pour garantir la cohérence; 3. Plusieurs appels de goroutine vers des bibliothèques C non-secours peuvent causer des problèmes de concurrence; 4. Il y a des surcharges de performances pour l'appel C du code, et le nombre d'appels à travers les limites de la langue doit être réduit. Le manque de cgo

Oui, GoApplicationsCanBeCross-CompiledfordiFferentOperatingSystemsandarchitectures.Todothis, FirstSetThegoosandgoarchenvironmentVariabeLestOspecifyTheTargetosandarchitecture, telasgoos = linuxGoarch = AMD64ForalinuxBinaryorGoos = WindowsGoarch = Arm64forAwindow

Go simplifie l'utilisation des pointeurs et améliore la sécurité. 1. Il ne prend pas en charge l'arithmétique du pointeur pour éviter les erreurs de mémoire; 2. Collection automatique des ordures et gestion de la mémoire sans allocation ou libération manuelle; 3. La méthode de structure peut utiliser de manière transparente des valeurs ou des pointeurs, et la syntaxe est plus concise; 4. Pointers s?rs par défaut pour réduire le risque de suspension des pointeurs et des fuites de mémoire. Ces conceptions sont plus faciles à utiliser et plus s?res que C / C, mais sacrifiez certaines des capacités de contr?le sous-jacentes.

GO compile le programme dans un binaire autonome par défaut, la raison principale est la liaison statique. 1. Déploiement plus simple: aucune installation supplémentaire de bibliothèques de dépendances, ne peut être exécutée directement sur les distributions Linux; 2. 3. Prévisibilité et sécurité plus élevées: éviter les risques provoqués par les changements dans les versions externes de la bibliothèque et améliorer la stabilité; 4. Flexibilité de fonctionnement limitée: Impossible de mise à jour à chaud des bibliothèques partagées, et se recompiler et le déploiement sont nécessaires pour corriger les vulnérabilités de dépendance. Ces fonctionnalités sont adaptées aux outils CLI, aux microservices et à d'autres scénarios, mais des compromis sont nécessaires dans les environnements où le stockage est restreint ou repose sur une gestion centralisée.

GoEnsuresMemorySafetywithoutmanual Management ThroughhroughAutomaticGarBageCollection, nopointeraRITHMetic, SafeConcurrency, AndruntimeCkecks.first, Go’sgarBageColEctorAutomAccilmatmestsunusedMemory, empêchant le sanddanglingpoiners.

Pour créer un canal tampon dans GO, spécifiez simplement les paramètres de capacité dans la fonction de faire. Le canal tampon permet à l'opération d'envoi de stocker temporairement les données en cas de récepteur, tant que la capacité spécifiée n'est pas dépassée. Par exemple, Ch: = Make (Chanint, 10) crée un canal tampon qui peut stocker jusqu'à 10 valeurs entières; Contrairement aux canaux non frappés, les données ne seront pas bloquées immédiatement lors de l'envoi, mais les données seront temporairement stockées dans le tampon jusqu'à ce qu'elles soient enlevées par le récepteur; Lorsque vous l'utilisez, veuillez noter: 1. Le réglage de la capacité doit être raisonnable pour éviter les déchets de mémoire ou le blocage fréquent; 2. Le tampon doit empêcher l'accumulation de problèmes de mémoire indéfiniment dans le tampon; 3. Le signal peut être passé par le type de chantruct {} pour enregistrer les ressources; Les scénarios courants incluent le contr?le du nombre de modèles de concurrence et de consommation producteur et de différenciation

GO est idéal pour la programmation système car il combine les performances des langages compilés tels que C avec la facilité d'utilisation et la sécurité des langages modernes. 1. En termes d'opérations de fichiers et de répertoires, le package OS de GO prend en charge la création, la suppression, le renommage et la vérification si les fichiers et les répertoires existent. Utilisez OS.Readfile pour lire l'intégralité du fichier dans une ligne de code, qui convient à l'écriture de scripts de sauvegarde ou d'outils de traitement de journal; 2. 3. En termes de réseau et de concurrence, le package net prend en charge la programmation TCP / UDP, la requête DNS et les ensembles originaux.
