高朗:为什么是sql。Tx 不实现驱动程序

为什么在下面的示例中编译器说不实现,看到确实满足了接口:sql.Txdriver.Txsql.Tx


import (

    "database/sql"

    "database/sql/driver"

)



func main() {

    var myDB store = db{}

}


type store interface {

    Store(tx driver.Tx)

}


type db struct {}


func (db) Store(tx *sql.Tx) {}

type Tx interface {

    Commit() error

    Rollback() error

}

./prog.go:9:6: cannot use db{} (type db) as type store in assignment:

    db does not implement store (wrong type for Store method)

        have Store(*sql.Tx)

        want Store(driver.Tx)

https://play.golang.org/p/p3vryYI_dhV


慕哥9229398
浏览 118回答 1
1回答

浮云间

你的实现需要完全匹配,因此 Store() 必须接受驱动程序。发射类型。不仅仅是一个 *sql.Tx.因为 sql.Tx 实现驱动程序。Tx接口它可以作为输入提供。import (    "database/sql"    "database/sql/driver")func main() {    var myDB store = db{}    sqlTx := &sql.Tx{}    myDB.Store(sqlTx)}type store interface {    Store(tx driver.Tx)}type db struct{}func (db) Store(tx driver.Tx) {}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go