Réponse : En langage Go, l'injection de dépendances peut être réalisée via des interfaces et des structures. Définissez une interface qui décrit le comportement des dépendances. Créez une structure qui implémente cette interface. Injectez des dépendances via des interfaces en tant que paramètres dans les fonctions. Permet un remplacement facile des dépendances lors des tests ou dans différents scénarios.
Go Language : Guide d'injection de dépendances
L'injection de dépendances est un modèle de conception permettant de transmettre des dépendances à une classe ou une fonction sans créer explicitement d'instance. Dans le langage Go, l'injection de dépendances peut être efficacement implémentée grâce à l'utilisation d'interfaces et de structures.
Interfaces et structures
Tout d'abord, nous définissons une interface, qui décrit le comportement requis de la dépendance. Par exemple, disons que nous avons une interface Database
qui définit la méthode suivante : Database
接口,它定义了以下方法:
type Database interface { Get(key string) (value string, err error) Set(key string, value string) error }
接下来,我们创建一个结构体来实现该接口,例如:
type InMemoryDatabase struct { data map[string]string } func (db *InMemoryDatabase) Get(key string) (string, error) { return db.data[key], nil } func (db *InMemoryDatabase) Set(key string, value string) error { db.data[key] = value return nil }
依赖注入
现在,我们可以在函数中注入依赖项。例如,我们有一个处理 HTTP 请求的函数:
func HandleRequest(db Database) (string, error) { key := "foo" value, err := db.Get(key) if err != nil { return "", err } db.Set(key, "bar") return value, nil }
通过将 Database
接口作为参数传递给 HandleRequest
,我们已经实现了依赖注入。这允许我们在测试或不同场景中轻松替换依赖项。
实战案例
我们可以在一个小型 web 应用程序中使用依赖注入。创建一个 main.go
文件,包含以下代码:
package main import ( "fmt" "net/http" "example.com/mypkg/db" ) var db db.Database func init() { db = db.NewInMemoryDatabase() } func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { value, err := HandleRequest(db) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } fmt.Fprint(w, value) }) http.ListenAndServe(":8080", nil) }
然后,运行以下命令启动 web 服务器:
go run main.go
现在,当您访问 localhost:8080
rrreee
Database
en paramètre à HandleRequest
, nous avons implémenté l'injection de dépendances. Cela nous permet de remplacer facilement les dépendances lors des tests ou de différents scénarios. 🎜🎜🎜Cas pratique🎜🎜🎜On peut utiliser l'injection de dépendances dans une petite application web. Créez un fichier main.go
avec le code suivant : 🎜rrreee🎜Ensuite, exécutez la commande suivante pour démarrer le serveur Web : 🎜rrreee🎜Maintenant, lorsque vous visitez localhost:8080
, il utilisera notre base de données injectée de dépendances pour gérer les demandes. 🎜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!