Ore : Package avancé d'injection de dépendances pour le langage Go
Site Web de documentation sur le minerai
Dépôt GitHub
Le langage Go est connu pour sa simplicité et ses hautes performances, mais les développeurs sont souvent confrontés à des défis en matière de gestion des dépendances. Bien que le langage Go ne dispose pas de framework DI intégré comme certains autres langages, il existe de nombreuses bibliothèques tierces qui peuvent vous aider. Ore est un tel package qui fournit une solution légère et efficace pour l'injection de dépendances (DI) dans les applications Go.
Ore est conçu pour simplifier et améliorer l'efficacité de l'ID sans introduire de surcharge de performances significative. Contrairement à de nombreuses autres bibliothèques DI, Ore utilise Go Generics au lieu de la réflexion ou de la génération de code, garantissant ainsi que votre application reste rapide et sécurisée. Cela rend Ore idéal pour les développeurs à la recherche d’une solution DI efficace et facile à utiliser. Dans cet article, nous présenterons les fonctionnalités clés d'Ore et comment elles peuvent vous aider à gérer les dépendances dans Go. Nous montrerons également quelques exemples de code de base pour démontrer comment Ore peut être utilisé dans des applications réelles.
pour enregistrer et résoudre les dépendances. Ce choix de conception évite la surcharge de performances généralement associée à la réflexion et à la génération de code. En utilisant des génériques, Ore garantit que la résolution des dépendances est sûre et efficace, sans aucune sorte de vérification d'exécution. Cette approche fait d'Ore une solution DI haute performance car elle évite les pièges de la réflexion et de la génération de code qui sont courants dans de nombreux autres frameworks DI.
2.
Inscription simple et flexible3.
Service de saisie. Cette fonctionnalité est utile lorsque vous devez gérer plusieurs versions d'un service ou devez implémenter un comportement différent en fonction de certaines conditions. Par exemple, vous pouvez créer plusieurs implémentations d'un service pour différents environnements (par exemple, test, production) ou différentes configurations (par exemple, en fonction des rôles des utilisateurs).
4.
Service d'espace réservé, vous permettant d'enregistrer des services avec des dépendances non résolues qui peuvent être renseignées au moment de l'exécution. Cette fonctionnalité est utile lorsque certaines valeurs ou services ne sont pas disponibles au moment de l'inscription, mais deviennent disponibles plus tard. Par exemple, vous pouvez enregistrer un service qui nécessite des valeurs de configuration, puis fournir dynamiquement la configuration réelle en fonction du contexte (par exemple, rôle utilisateur ou environnement).
Ore inclut une vérification d'enregistrement intégrée qui détecte les problèmes courants tels que :
Cette validation se produit automatiquement lorsque vous utilisez ore.Get ou ore.GetList pour résoudre le service, mais vous pouvez également déclencher la validation manuellement à l'aide de ore.Validate(). Cela garantit que votre graphique de dépendances est correct et évite les erreurs d'exécution dues à une mauvaise configuration.
De plus, vous pouvez désactiver la validation pour des raisons de performances ou sceller le conteneur pour empêcher d'autres modifications après l'enregistrement de tous les services.
La performance est une considération clé dans Ore. En évitant la réflexion et la génération de code, Ore reste rapide, même dans les grandes applications avec des graphes de dépendances complexes. Les résultats de référence d'Ore démontrent son efficacité, certaines opérations ne prenant que quelques nanosecondes. Cela fait d'Ore un excellent choix pour les applications Go hautes performances qui nécessitent une DI efficace sans surcharge supplémentaire.
Ore prend en charge les conteneurs modulaires, vous permettant de définir des conteneurs séparés pour différentes parties de votre application. Ceci est particulièrement utile pour les applications modulaires, où différents composants ou modules ont des dépendances différentes. Vous pouvez définir des conteneurs étendus pour différents cas d'utilisation, ce qui rend votre gestion des dépendances plus organisée et plus facile à maintenir.
Pour mieux comprendre le fonctionnement d'Ore, examinons quelques exemples simples utilisant le conteneur Ore par défaut.
<code class="language-go">package main import ( "context" "fmt" "github.com/firasdarwish/ore" ) // 定义一个接口 type Greeter interface { Greet() string } // 定义一个服务实现 type FriendlyGreeter struct{} func (g *FriendlyGreeter) Greet() string { return "Hello, world!" } func main() { // 使用默认Ore容器注册服务 ore.RegisterFunc[Greeter](ore.Singleton, func(ctx context.Context) (Greeter, context.Context) { return &FriendlyGreeter{}, ctx }) // 从默认Ore容器解析服务 greeter, _ := ore.Get[Greeter](context.Background()) fmt.Println(greeter.Greet()) // 输出:Hello, world! }</code>
Cet exemple montre l'enregistrement d'un service. Ici, nous définissons une interface Greeter et une implémentation FriendlyGreeter, l'enregistrons en tant que singleton, puis la résolvons à l'aide du conteneur Ore par défaut.
<code class="language-go">package main import ( "context" "fmt" "github.com/firasdarwish/ore" ) // 定义一个接口 type Greeter interface { Greet() string } // 定义多个实现 type FriendlyGreeter struct{} func (g *FriendlyGreeter) Greet() string { return "Hello, friend!" } type FormalGreeter struct{} func (g *FormalGreeter) Greet() string { return "Good day, Sir/Madam." } func main() { // 使用键注册多个实现 ore.RegisterKeyedFunc[Greeter](ore.Singleton, func(ctx context.Context) (Greeter, context.Context) { return &FriendlyGreeter{}, ctx }, "friendly") ore.RegisterKeyedFunc[Greeter](ore.Singleton, func(ctx context.Context) (Greeter, context.Context) { return &FormalGreeter{}, ctx }, "formal") // 根据键解析特定实现 greeter, _ := ore.GetKeyed[Greeter](context.Background(), "friendly") fmt.Println(greeter.Greet()) // 输出:Hello, friend! greeter, _ = ore.GetKeyed[Greeter](context.Background(), "formal") fmt.Println(greeter.Greet()) // 输出:Good day, Sir/Madam. }</code>
Dans cet exemple, nous enregistrons deux implémentations de l'interface Greeter avec les clés ("convivial" et "formel") et les résolvons en fonction des clés requises. Cette flexibilité vous permet de gérer facilement différentes implémentations.
Ore fournit une solution d'injection de dépendances concise, simple et efficace pour Go. En utilisant Go generics, Ore fournit une résolution rapide et type-safe sans la surcharge de performances de la réflexion. Il est flexible et facile à utiliser et comprend des fonctionnalités telles que les Keyed Services, les Placeholder Services et la Validation pour garantir que votre application reste robuste.
Site Web de documentation sur le minerai
Dépôt GitHub
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!