gpt4 book ai didi

mysql - 扫描到无效类型时,sqlx 不会抛出错误

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:47 27 4
gpt4 key购买 nike

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

+-------+--------------+------+-----+---------+-------+
| 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}

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

最佳答案

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

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

关于mysql - 扫描到无效类型时,sqlx 不会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com