Maison développement back-end Golang paquet golang caché

paquet golang caché

May 21, 2023 pm 08:19 PM

Alors que de plus en plus de développeurs se tournent vers le langage Go pour développer, la question de la gestion des packages golang a progressivement été mise à l'ordre du jour. Parmi eux, le masquage de packages (Package Hiding) est une fonction très importante. Elle peut nous aider à masquer certaines fonctions qui ont des détails d'implémentation internes ou qui sont considérées comme obsolètes dans les projets en langage Go, améliorant ainsi la lisibilité et la sécurité d'utilisation.

Cet article présentera les principes, les scénarios d'utilisation et les méthodes de mise en œuvre du masquage de packages Golang. J'espère qu'il pourra aider les lecteurs à comprendre en profondeur cette fonction et à l'appliquer à des projets réels.

1. Qu'est-ce que le colis caché ?

Avant de comprendre le masquage de packages, vous devez d'abord comprendre ce qu'est un package (Package) dans Golang et ses caractéristiques. Dans Golang, chaque fichier appartient à un package et, dans un package, les fichiers peuvent accéder aux variables internes, fonctions, méthodes et autres contenus publics les uns des autres.

Cependant, dans certains cas, nous ne souhaitons pas que certaines variables ou fonctions publiques soient accessibles par d'autres packages, car il peut s'agir de détails d'implémentation internes du projet ou de fonctions obsolètes et abandonnées si un accès externe entraîne des risques de sécurité ou est nuisible. à une autre fonction est affectée.

À l'heure actuelle, vous devez utiliser la fonction de masquage de paquets de Golang pour masquer certaines fonctions implémentées ou abandonnées en interne pour un usage interne uniquement et non exposées au monde extérieur.

2. Scénarios d'utilisation du masquage de packages

  1. Masquer l'implémentation sous-jacente du démarrage du service

Dans le développement Web, nous devons souvent implémenter un service de serveur Web. Cependant, dans un environnement de production, l'existence d'installations de sécurité telles que des pare-feu signifie que le service du serveur Web ne peut utiliser que des ports fixes pour l'écoute et ne peut pas être configuré via des paramètres de ligne de commande ou d'autres méthodes. À l'heure actuelle, si le numéro de port est directement exposé à l'extérieur, cela peut entraîner des risques de sécurité et les attaquants peuvent directement utiliser le numéro de port pour lancer des attaques.

Afin de résoudre le problème, nous pouvons utiliser la fonction de masquage de package pour masquer l'implémentation sous-jacente du démarrage du service et fournir uniquement une interface qui n'est pas exposée au monde extérieur pour être utilisée par d'autres modules, garantissant ainsi la sécurité du service.

  1. Masquer les fonctions et variables obsolètes

Lorsque nous supprimons certaines fonctions et variables obsolètes du projet, afin d'empêcher d'autres modules d'utiliser ces contenus supprimés, nous pouvons utiliser la fonction de masquage du package pour les masquer, dans Ce ne sera pas le cas. ne plus être utilisé dans le projet pour éviter les risques potentiels pour la sécurité.

3. Comment implémenter le masquage de package

  1. Utiliser des lettres minuscules comme préfixe d'identifiant

En Golang, si la première lettre de l'identifiant d'une variable ou d'une fonction est une lettre minuscule, alors il s'agit d'une variable privée à l'intérieur du package Ou une fonction, qui n'est utilisée qu'en interne par le package et n'est pas exposée au monde extérieur.

Par exemple :

package utils

import "fmt"

// 私有变量
var _privateVariable = "I am a private variable"

// 公共变量
var PublicVariable = "I am a Public variable"

// 私有函数
func _privateFunction() {
    fmt.Println("I am a private function")
}

// 公共函数
func PublicFunction() {
    fmt.Println("I am a Public function")
    _privateFunction()
}
Copier après la connexion

Dans cet exemple, la variable _privateVariable et la fonction _privateFunction sont définies comme variables privées et fonctions privées à l'intérieur du package et ne peuvent être utilisées que dans le package utils. La variable PublicVariable et la fonction PublicFunction sont publiques et peuvent être référencées et utilisées par d'autres packages.

  1. Utilisez l'identifiant vierge "_"

Dans Golang, l'identifiant "_" (trait de soulignement) est défini comme un identifiant spécial, qui peut être utilisé pour des espaces réservés ou des variables qui ne sont utilisés qu'une seule fois, donc peut être utilisé pour masquer variables et fonctions qui n’ont pas besoin d’être exportées.

Exemple :

package utils

import "fmt"

// 私有变量
var (
    _privateVariable = "I am a private variable"
    _unusedVariable  = "I am a unused variable"
)

// 公共函数
func PublicFunction() {
    fmt.Println("I am a Public function")
}
Copier après la connexion

Dans cet exemple, la variable _unusedVariable est définie comme une variable qui n'a pas besoin d'être exportée et n'est pas utilisée. En utilisant l'identifiant vide "_", elle évite son impact sur les autres packages.

4. Résumé

Le masquage de packages est une fonction très importante dans Golang. Il peut nous aider à masquer certaines fonctions qui ont des détails d'implémentation internes ou qui sont considérées comme obsolètes, et à améliorer la lisibilité et la sécurité du code. En utilisant des lettres minuscules comme préfixes d'identifiant et des identifiants vides "_", nous pouvons facilement définir et masquer des variables et des fonctions qui n'ont pas besoin d'être exportées, rendant l'ensemble du projet plus robuste et sécurisé.

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 de ce site Web
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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement? Mar 03, 2025 pm 05:17 PM

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego? Mar 03, 2025 pm 05:22 PM

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment écrire des objets et des talons simulés pour les tests en Go? Comment écrire des objets et des talons simulés pour les tests en Go? Mar 10, 2025 pm 05:38 PM

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO? Mar 10, 2025 pm 05:36 PM

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go? Mar 03, 2025 pm 05:18 PM

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment rédigez-vous des tests unitaires en Go? Comment rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

Comment rédigez-vous des tests unitaires en Go?

Comment écrire des fichiers dans GO Language de manière pratique? Comment écrire des fichiers dans GO Language de manière pratique? Mar 03, 2025 pm 05:15 PM

Comment écrire des fichiers dans GO Language de manière pratique?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go? Mar 10, 2025 pm 03:20 PM

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?

See all articles