为了账号安全,请及时绑定邮箱和手机立即绑定

扫描到无效类型时,Sqlx 不会抛出错误

扫描到无效类型时,Sqlx 不会抛出错误

Go
慕丝7291255 2021-07-15 14:15:33
我在 Go 中使用 sqlx,这很有帮助,但是当我使用 struct scan 并且结构的类型与 sql 类型不匹配时,它似乎不会抛出错误。例如,我在这里设置了一个数据库以具有名称(字符串)和年龄(整数):+-------+--------------+------+-----+---------+-------+| Field | Type         | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+-------+| name  | varchar(255) | NO   |     | NULL    |       || age   | int(11)      | NO   |     | NULL    |       |+-------+--------------+------+-----+---------+-------++------+-----+| name | age |+------+-----+| bob  |  10 |+------+-----+然后我使用 sqlx 将值读出到一个结构中,但该结构的类型错误。package mainimport (  "log"  "github.com/jmoiron/sqlx"  _ "github.com/go-sql-driver/mysql")// in database name is a string and age is an inttype 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}有没有其他人遇到过这个问题?有没有人认为这是一个错误?我认为当我尝试扫描到无效类型时它应该给我一个错误。
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我怀疑这是在找不到放置返回值的位置时决定不返回错误的副作用。您可能不想返回错误的一个原因是,如果您执行“select *”,那么即使您的结构具有所有列,您也将无法添加新列,而代码会立即开始返回错误。

有人可能会争辩说,如果所有查询列都未使用,那么它应该返回一个错误。可能打开项目的问题将是要走的路。


查看完整回答
反对 回复 2021-07-19
  • 1 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信