我在 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 *”,那么即使您的结构具有所有列,您也将无法添加新列,而代码会立即开始返回错误。
有人可能会争辩说,如果所有查询列都未使用,那么它应该返回一个错误。可能打开项目的问题将是要走的路。
- 1 回答
- 0 关注
- 222 浏览
添加回答
举报
0/150
提交
取消