Maison  >  Article  >  développement back-end  >  Pourquoi Golang ne recommande-t-il pas cgo ?

Pourquoi Golang ne recommande-t-il pas cgo ?

PHPz
PHPzoriginal
2023-04-25 09:10:411236parcourir

Dans le domaine de la programmation, Golang attire de plus en plus l'attention et l'amour des développeurs, et ses performances sont particulièrement remarquables dans les scénarios à grande échelle et à haute concurrence. Golang est un langage de programmation né pour résoudre des scénarios d'application multilingues. Ses caractéristiques sont la compilation statique, un mécanisme de récupération de place intégré, une haute sécurité et une efficacité de développement élevée. Parmi eux, c'est un défaut de Golang qui fait que CGO n'est pas recommandé.

Dans Golang, CGO est un mécanisme utilisé pour appeler la bibliothèque de fonctions du langage C. Il permet au code Golang d'appeler des fonctions du langage C pour utiliser des bibliothèques de fonctions écrites en langage C dans Golang. Derrière le mécanisme CGO, il s'appuie sur libgcc_s.so et libc.so. Ces deux bibliothèques encapsulent les appels entre les fonctions de la bibliothèque du langage C et Golang. Par conséquent, l'introduction de CGO augmentera la taille du fichier exécutable et entraînera un fonctionnement relativement lent du programme. . lent.

Généralement, Golang fonctionne très bien lors du traitement de types de données tels que des chaînes, des tableaux, des tranches et des structures, mais ses performances ne sont pas exceptionnelles lorsqu'il s'agit de traiter de grandes quantités de données binaires telles que des images, de l'audio et de la vidéo. Cela nécessite l'utilisation de fonctions de bibliothèque pertinentes en langage C pour le traitement et le renvoi des résultats à Golang. Dans ce cas, le mécanisme CGO peut être une solution.

Cependant, il convient de noter que la commodité apportée par le mécanisme de CGO se fait au détriment de l’efficacité et de la sécurité de l’exécution du programme. D'une part, CGO introduit l'arithmétique des pointeurs en langage C, que Golang ne peut pas vérifier correctement. Une fois que des erreurs se produisent lors de l’utilisation croisée de pointeurs, cela entraînera des problèmes de sécurité tels que des plantages de programmes et des fuites de données. D'un autre côté, puisque les deux bibliothèques libgcc_s.so et libc.so doivent être chargées dynamiquement avant d'exécuter le programme, la vitesse de démarrage du programme est ralentie, et cela ajoute un certain degré de difficulté à la publication, à la livraison et à la livraison du programme. déploiement.

On peut dire que même si CGO offre une bonne solution dans des scénarios spécifiques, il existe également de nombreux problèmes et risques. Par conséquent, les responsables de Golang ne recommandent pas aux développeurs d'utiliser le mécanisme CGO dans le développement quotidien, sauf si cela est nécessaire, comme dans le cas de bibliothèques d'algorithmes spéciales, ils envisageront d'utiliser CGO pour le développement.

Tout en résolvant les problèmes ci-dessus, les développeurs devraient utiliser davantage les propres fonctionnalités de Golang, telles que la haute concurrence, le multithread, le mécanisme GC, etc., pour maximiser ses performances. Pour les situations où des données binaires telles que des images, de l'audio et de la vidéo doivent être traitées fréquemment, vous pouvez envisager d'utiliser d'autres langages pour écrire les modules de traitement correspondants, puis les appeler via l'API fournie par Golang pour obtenir les meilleures performances et sécurité.

En général, Golang est un langage de programmation efficace, sûr et facile à développer. Ses mécanismes et fonctionnalités internes sont suffisants pour résoudre la plupart des problèmes du travail quotidien des développeurs. En revanche, bien que CGO offre une solution multilingue, il augmente également certains risques et difficultés. Par conséquent, les développeurs doivent faire des choix basés sur les conditions réelles, utiliser rationnellement les avantages de Golang et éviter toute utilisation inutile de CGO.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn