Amalan terbaik untuk melaksanakan suntikan kebergantungan dalam Go termasuk: Gandingan longgar: Gandingkan objek secara longgar dengan kebergantungannya untuk meningkatkan kebolehujian dan kebolehselenggaraan. Kebolehujian: Tingkatkan kredibiliti ujian dengan mengejek kebergantungan untuk ujian unit. Kebolehskalaan: Meningkatkan kebolehskalaan kod anda dengan menukar atau menambah kebergantungan dengan mudah. Laksanakan DI menggunakan perpustakaan pihak ketiga seperti wayar, tentukan antara muka dan cipta kebergantungan menggunakan wayar.NewSet.
Amalan Terbaik Suntikan Ketergantungan dalam Bahasa Go
Suntikan Ketergantungan (DI) ialah corak reka bentuk perisian yang membolehkan kebergantungan disuntik ke dalam objek semasa masa jalan. Dalam bahasa Go, DI membantu meningkatkan kebolehujian, kebolehskalaan dan kebolehselenggaraan kod.
Faedah DI
Melaksanakan DI dalam bahasa Go
Bahasa Go mempunyai sokongan terbina dalam yang sangat terhad untuk DI. Oleh itu, selalunya perlu menggunakan perpustakaan pihak ketiga untuk melaksanakan DI. Pustaka yang popular ialah [wire](https://github.com/google/wire).
Untuk menggunakan wayar, anda perlu terlebih dahulu menentukan antara muka yang mengandungi semua kebergantungan:
type MyServiceDeps struct { Repository Repository Logger Logger }
Kemudian, anda boleh menggunakan fungsi wire.NewSet
untuk mencipta struktur yang diperlukan: wire.NewSet
函数创建所需的结构:
func NewMyService(deps MyServiceDeps) MyService { return MyService{ repository: deps.Repository, logger: deps.Logger, } }
最后,使用 InitInjector
函数生成依赖项注入器:
func main() { wire.Build( NewMyService, NewRepository, NewLogger, ) }
实战案例
考虑一个シンプルな Web 应用程序,它需要与数据库和 HTTP 服务器交互。我们可以使用 DI 来创建松散耦合的服务,这些服务可以独立于特定依赖项进行测试:
// 定义依赖项接口 type UserRepo interface { GetUser(id int) (*User, error) } type HTTPServer interface { Start() error } // 定义服务结构 type UserService struct { repo UserRepo } // 实现用户服务方法 func (s *UserService) GetUser(id int) (*User, error) { return s.repo.GetUser(id) } // 定义 DI 函数 func NewUserService(r UserRepo) *UserService { return &UserService{ repo: r, } } // 初始化 DI 注入器,并启动 HTTP 服务器 func main() { injector, err := wire.Build( NewUserService, NewUserRepository, NewHTTPServer, ) if err != nil { panic(err) } server := injector.Get(NewHTTPServer) server.Start() }
在这个示例中,DI 使我们能够在不修改 UserService
rrreee
InitInjector
menjana penyuntik kebergantungan: 🎜rrreee🎜🎜Kes praktikal 🎜🎜🎜Pertimbangkan シンプルなaplikasi Web yang perlu berinteraksi dengan pangkalan data dan pelayan HTTP. Kami boleh menggunakan DI untuk mencipta perkhidmatan gandingan longgar yang boleh diuji secara bebas daripada kebergantungan tertentu: 🎜rrreee🎜 Dalam contoh ini, DI membenarkan kami membuat perubahan tanpa mengubah suai kod UserService
Pangkalan Data atau pelaksanaan pelayan HTTP. 🎜Atas ialah kandungan terperinci Amalan terbaik suntikan pergantungan bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!