我有一个结构DbConnector
,我想用它作为代理来与数据库进行通信。
此结构具有方法Init(db *sql.DB)
。
根据条件,我希望能够使用其他结构初始化它,例如DummyDatabaseConnection
进行测试。
如何定义Init()
的签名,使其接受*sql.DB
或*DummyDatabaseConnection
?
答案 0 :(得分:2)
使用您需要为*sql.DB
& *DummyDatabaseConnection
type DBInterface interface {
Ping() error
Close() error
// Some other Methods that you need
}
现在你的DummyDatabaseConnection应该满足你的DBInterface。
type DummyDatabaseConnection struct {
}
func(d *DummyDatabaseConnection) Ping()error {
return nil
}
func(d *DummyDatabaseConnection) Close()error {
return nil
}
使用您的界面作为参数
func (d *DbConnector) Init(db DBInterface) {
db.Ping()
db.Close()
}
拨打您需要的电话。
dbConnector := &DbConnector{}
// Call with *sql.DB
db := &sql.DB{}
dbConnector.Init(db)
// Call with *DummyDatabaseConnection
db := &DummyDatabaseConnection{}
dbConnector.Init(db)
从您的Init(db DBInterface)
方法中,您只能调用 DBInterface 界面中的方法
希望这会有所帮助