Go 如何使结构接受两种类型中的一种作为参数?

Go 如何使结构接受两种类型中的一种作为参数?,go,struct,interface,Go,Struct,Interface,我有一个structDbConnector,我想用它作为与数据库通信的代理 此结构具有方法Init(db*sql.db) 根据条件,我希望能够使用另一个结构初始化它,比如DummyDatabaseConnection进行测试 如何定义Init()的签名,使其接受*sql.DB或*DummyDatabaseConnection?使用需要调用的一些方法定义接口*sql.DB和*DummyDatabaseConnection type DBInterface interface { Ping(

我有一个struct
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(dbdbinterface)
方法中,只能调用DBInterface中的方法

检查


希望这将有助于使用界面。和
*sql.DB
*DummyDatabaseConnection
都需要实现该接口。