DummyDatabaseConnection

DummyDatabaseConnection

我有一个DbConnector结构,我想用作与数据库通信的代理。

该结构具有方法Init(db *sql.DB)

根据条件,我希望能够使用其他结构(例如用于测试的DummyDatabaseConnection)对其进行初始化。

如何定义Init()的签名,以便它可以接受*sql.DB*DummyDatabaseConnection

最佳答案

使用一些需要调用*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接口中的方法

检查this post

希望这会有所帮助

10-05 23:35