bv
2024-06-05 10:09:40 +08:00
依赖注入,用框架也可以,自己依赖注入也可以:
```go
func Run(cfg Config) error {
db, err := mysql.Open(cfg.Database)
if err != nil {
return err
}
defer db.Close()
mq, err := kafka.Open(cfg.Kafka)
if err != nil {
return err
}
defer mq.Close()
rdb, err := redis.Open(cfg.Redis)
if err != nil {
return err
}
defer rdb.Close()
bar := NewBar(db, mq, rdb)
return bar.Foo()
}
func NewBar(db *sql.DB, mq *kafka.Client, rdb *redis.Client) *Bar {
return &Bar{
db: db,
mq: mq,
rdb: rdb,
}
}
type Bar struct {
db *sql.DB
mq *kafka.Client
rdb *redis.Client
}
func (b *Bar) Foo() error {
_, err := b.db.Exec("SELECT 1")
return err
}
```