Golang Sqlx没有抛出错误

时间:2014-01-22 21:22:27

标签: mysql go

我在golang中使用sqlx,这是非常有用的,但是当我使用struct scan并且struct的类型与sql类型不匹配时,它似乎没有抛出错误。例如,我在这里设置了一个数据库,其名称(字符串)和年龄(int):

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(255) | NO   |     | NULL    |       |
| age   | int(11)      | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
+------+-----+
| name | age |
+------+-----+
| bob  |  10 |
+------+-----+

然后我使用sqlx将值读出到结构中,但结构的类型错误。

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}

还有其他人遇到过这个问题吗?有没有人认为这是一个错误?我认为当我尝试扫描无效类型时,它会给我一个错误。

1 个答案:

答案 0 :(得分:0)

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

有人可能会争辩说,如果 all 查询列未使用,那么它应该返回错误。可能会打开一个项目问题。