Maison  >  Article  >  développement back-end  >  paquet golang caché

paquet golang caché

王林
王林original
2023-05-21 20:19:35410parcourir

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()
}

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")
}

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:
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 précédent:Comment rejoindre GolangArticle suivant:Comment rejoindre Golang