Menggunakan Suntikan Ketergantungan untuk Menghantar Argumen kepada Pengendali Penghala Gin
Di Golang, amalan biasa untuk menguruskan kebergantungan dalam aplikasi web adalah melalui suntikan kebergantungan . Teknik ini membolehkan anda menghantar hujah kepada pengendali tanpa menggunakan pembolehubah global atau mengubah suai secara langsung tandatangan fungsi.
Menggunakan Penutupan
Satu pendekatan ialah menggunakan penutupan untuk membalut pengendali anda berfungsi dengan kebergantungan yang dikehendaki. Penutupan merangkum kebergantungan, membolehkannya diserahkan kepada pengendali apabila dipanggil.
// SomeHandler encapsulates the DB connection and returns a handler function func SomeHandler(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { // Use the db connection within the handler rows, err := db.Query(...) if err != nil { c.JSON(http.StatusInternalServerError, err) return } c.JSON(http.StatusOK, rows) } } func main() { db, err := sql.Open(...) router := gin.Default() router.GET("/test", SomeHandler(db)) }
Menggunakan Middleware
Middleware ialah satu lagi pilihan untuk menghantar hujah kepada pengendali. Fungsi middleware dilaksanakan sebelum pengendali sebenar dan boleh mengubah suai konteks permintaan atau menyuntik kebergantungan.
// DBMiddleware injects the DB connection into the context func DBMiddleware(db *sql.DB) gin.HandlerFunc { return func(c *gin.Context) { c.Set("db", db) c.Next() } } func SomeHandler(c *gin.Context) { // Retrieve the DB connection from the context db := c.MustGet("db").(*sql.DB) // Use the db connection within the handler } func main() { db, err := sql.Open(...) router := gin.Default() router.Use(DBMiddleware(db)) router.GET("/test", SomeHandler) }
Dengan menggunakan teknik suntikan kebergantungan, anda boleh mengelak daripada mencemarkan pembolehubah global dan mengekalkan pemisahan kod yang bersih sambil menghantar hujah dengan berkesan kepada Gin pengendali penghala.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyuntik Ketergantungan ke dalam Pengendali Penghala Gin dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!