database/sql包支持将自定义类型作为输入(对于查询的参数,类型为driver.Value)和输出(Row.Scan
)。
自定义类型可以有选择地实现driver.Valuer和/或sql.Scanner接口,但是database/sql
还内置了对从driver.Value类型派生的类型的支持。
由于我的代码依赖于对基于整数的类型的内置支持,因此我希望从SQL数据库强制执行脱序列/反序列化现在可以使用,并且将来仍然可以使用(回归测试):进行版本更改,或者由于类型所实现的方法更改可能影响database/sql
行为。
对于输入案例,我可以使用driver.DefaultParameterConverter.ConvertValue
。
但是我看不到如何为Scan
行为编写单元测试。我基本上想为自己的私有does in its own testsuite做database/sql
包convertAssign
function,但对于我自己的类型。
在某些地方,我不知道可以取消注释代码并替换?????????????
(see on play.golang.org):
package main
import (
"database/sql/driver"
"log"
)
type myint int
func main() {
in := myint(42)
v, err := driver.DefaultParameterConverter.ConvertValue(in)
if err != nil {
log.Fatal(err)
}
_ = v
/*
var out myint
err = ?????????????(v, &out)
if err != nil {
log.Fatal(err)
}
if out != in {
log.Fatal("roundtrip failure")
}
*/
}