Golang:为什么 sql.Tx 没有实现 driver.Tx
Golang: Why sql.Tx does not implement driver.Tx
为什么在下面的示例中编译器说 sql.Tx
没有实现 driver.Tx
,看到 sql.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)
您的实现需要完全匹配,因此 Store() 必须接受 driver.TX 类型。不止一个*sql.Tx.
因为 sql.Tx 实现了 driver.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) {}
为什么在下面的示例中编译器说 sql.Tx
没有实现 driver.Tx
,看到 sql.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)
您的实现需要完全匹配,因此 Store() 必须接受 driver.TX 类型。不止一个*sql.Tx.
因为 sql.Tx 实现了 driver.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) {}