Mysql 扫描到无效类型时Sqlx未引发错误
我在Go中使用了sqlx,这非常有用,但是当我使用struct scan并且struct的类型与sql类型不匹配时,它似乎不会抛出错误。例如,我在这里设置了一个数据库,其中包含名称(字符串)和年龄(int): 然后,我使用sqlx将值读取到结构中,但该结构的类型错误Mysql 扫描到无效类型时Sqlx未引发错误,mysql,go,Mysql,Go,我在Go中使用了sqlx,这非常有用,但是当我使用struct scan并且struct的类型与sql类型不匹配时,它似乎不会抛出错误。例如,我在这里设置了一个数据库,其中包含名称(字符串)和年龄(int): 然后,我使用sqlx将值读取到结构中,但该结构的类型错误 package main import ( "log" "github.com/jmoiron/sqlx" _ "github.com/go-sql-driver/mysql" ) // in database na
package main
import (
"log"
"github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql"
)
// in database name is a string and age is an int
type Person struct{
Name int
Age string
}
func main() {
sqlSession, err := sqlx.Open("mysql", "root:@(localhost:3306)/dashboard?parseTime=true")
if err != nil {
log.Panic(err)
}
err = sqlSession.Ping()
if err != nil {
log.Panic(err)
}
query := "SELECT * FROM test"
rows, errSql := sqlSession.Queryx(query)
if errSql != nil {
log.Panic(errSql)
}
for rows.Next() {
var p Person
errScan := rows.StructScan(&p)
if errScan != nil {
log.Panic(errScan)
}
log.Println("Person:", p)
}
}
因此,它没有给我一个错误,而是将值归零。人:{0}
还有其他人遇到过这个问题吗?还有人认为这是一个bug吗?我认为当我尝试扫描无效类型时,它应该会给我一个错误。我怀疑这是当它找不到放置返回值的位置时决定不返回错误的副作用。您可能不想返回错误的一个原因是,如果执行“选择*”,则即使您的结构包含所有列,如果代码没有立即开始返回错误,您也无法添加新列
有人可能会说,如果所有查询列都未使用,那么它应该返回一个错误。也许打开一个项目的问题将是一个好办法。谢谢你的回答,我将尝试打开并发布,看看它是如何进行的。
package main
import (
"log"
"github.com/jmoiron/sqlx"
_ "github.com/go-sql-driver/mysql"
)
// in database name is a string and age is an int
type Person struct{
Name int
Age string
}
func main() {
sqlSession, err := sqlx.Open("mysql", "root:@(localhost:3306)/dashboard?parseTime=true")
if err != nil {
log.Panic(err)
}
err = sqlSession.Ping()
if err != nil {
log.Panic(err)
}
query := "SELECT * FROM test"
rows, errSql := sqlSession.Queryx(query)
if errSql != nil {
log.Panic(errSql)
}
for rows.Next() {
var p Person
errScan := rows.StructScan(&p)
if errScan != nil {
log.Panic(errScan)
}
log.Println("Person:", p)
}
}