Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menyuntik Ketergantungan ke dalam Pengendali Penghala Gin dalam Go?

Bagaimanakah Saya Boleh Menyuntik Ketergantungan ke dalam Pengendali Penghala Gin dalam Go?

Susan Sarandon
Lepaskan: 2024-12-11 07:59:10
asal
208 orang telah melayarinya

How Can I Inject Dependencies into Gin Router Handlers in Go?

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))
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan