Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Meningkatkan Suntikan Ketergantungan dalam Go Beyond Instantiation Asas?

Bagaimanakah Saya Boleh Meningkatkan Suntikan Ketergantungan dalam Go Beyond Instantiation Asas?

Barbara Streisand
Barbara Streisandasal
2024-12-21 09:48:13200semak imbas

How Can I Improve Dependency Injection in Go Beyond Basic Instantiation?

Corak Suntikan Ketergantungan yang Dipertingkatkan dalam Go

Dalam Go, pendekatan tradisional untuk komponen pendawaian adalah untuk membuat instantiat secara manual dan lulus kebergantungan dalam fungsi utama , seperti yang dilihat dalam kod yang diberikan. Walaupun kaedah ini berfungsi, ia boleh menjadi menyusahkan dan terdedah kepada ralat apabila pangkalan kod berkembang.

Untuk menangani isu ini, adalah wajar mempertimbangkan corak alternatif:

1. Parameter Fungsi

Lepasi kebergantungan sebagai parameter fungsi. Ini memudahkan ujian dengan membenarkan kebergantungan mudah dipermainkan.

func someConsumer(g Guy) {
  fmt.Println("Hello, " + g.SomeDumbGuy())
}

func main() {
    var d datstr
    someConsumer(d)
}

2. Fungsi Kilang

Buat fungsi kilang yang mengembalikan objek dengan kebergantungan yang telah disuntik. Ini memusatkan suntikan kebergantungan dan menjadikannya lebih mudah untuk mengkonfigurasi kebergantungan berdasarkan konteks tertentu.

func NewGuy() Guy {
  return &datstr{}
}

func someConsumer(g Guy) {
  fmt.Println("Hello, " + g.SomeDumbGuy())
}

func main() {
    g := NewGuy()
    someConsumer(g)
}

3. Middleware

Gunakan fungsi middleware untuk memintas permintaan dan menyuntik kebergantungan ke dalam konteks permintaan. Ini memberikan fleksibiliti dan membolehkan suntikan pergantungan dinamik.

func wrapWithGuy(handler http.Handler) http.Handler {
  return func(w http.ResponseWriter, r *http.Request) {
    g := NewGuy()
    r.Context() = context.WithValue(r.Context(), "guy", g)
    handler.ServeHTTP(w, r)
  }
}

func main() {
  handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    g := r.Context().Value("guy").(Guy)
    fmt.Fprintf(w, "Hello, %s!", g.SomeDumbGuy())
  })
  http.Handle("/", wrapWithGuy(handler))
  http.ListenAndServe(":8080", nil)
}

Elak Perpustakaan DI

Tidak seperti bahasa lain, Go tidak memerlukan penggunaan suntikan pergantungan (DI ) perpustakaan. Malah, perpustakaan DI boleh memperkenalkan kerumitan dan abstraksi yang tidak perlu. Kesederhanaan dan pengurusan pergantungan yang jelas Go menggalakkan ketelusan dan kemudahan penyahpepijatan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meningkatkan Suntikan Ketergantungan dalam Go Beyond Instantiation Asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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