Les packages Go sont souvent utilisés par plusieurs modules ou programmes. Bien qu'il ne nécessite qu'un petit sous-ensemble de fonctionnalités, l'ensemble du package peut finir par être compilé dans chaque exécutable. Cela peut entraîner la création de fichiers binaires volumineux comprenant des fonctions et des chaînes inutilisées.
Malheureusement, contrairement à certains autres langages de programmation, Go n'offre actuellement pas de moyen de supprimer explicitement le code inutilisé au moment de la compilation. Le compilateur optimise et supprime le code inaccessible dans une certaine mesure, mais il ne peut pas déterminer le code inutilisé potentiellement accessible, même s'il n'est jamais explicitement appelé.
Ce comportement peut être démontré avec le code suivant :
// play/subplay.go package subplay func A() { fmt.Printf("this is function A()") } func B() { fmt.Printf("secret string") }
Dans le module principal, nous importons le package subplay mais appelons uniquement la fonction A() :
// main.go package main import "play/subplay" func main() { subplay.A() }
Bien que B() ne soit jamais appelée, la chaîne "chaîne secrète" est toujours incluse dans le binaire résultant.
Comme indiqué dans les réponses à cette question, une solution de contournement consiste à tenir compte des dépendances introduites par les packages importés. Par exemple, l'importation de net/http importera également 39 autres packages, ce qui peut augmenter considérablement la taille du binaire, même si aucun de ces packages n'est utilisé.
Bien que le compilateur ne soit pas en mesure de supprimer le code inutilisé, il est toujours essentiel pour optimiser le code pour plus d’efficacité. Éviter les appels de fonctions inutiles, conserver des structures de données simples et minimiser les allocations de chaînes peuvent tous contribuer à réduire la taille des binaires.
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!