Go Scanner 仍然返回 <nil>

标签 go gorp

首先:我是golang的新手,所以我可能不太了解。 我的任务是使用“gorp”从一个数据库中编写一个 Go 数据提取器。问题出在一张表上,该表具有自定义字段“TimeRange”。 它被定义为:

type TimeRange struct {
    From string
    To  string
}

遗憾的是,当我尝试获取行时出现扫描器错误,所以我意识到我需要一个自定义扫描器。

// Scan - Implement the database/sql scanner interface
func (tr *TimeRange) Scan(value interface{}) error {
    tr.From = "mis"
    tr.To = "lala"
    fmt.Printf("%v\n", *tr)

    return nil
}

所以我希望在返回的字符串中看到固定的 '{mis lala}'。 为什么我得到:

var q2 []models.Dashboard
result, err := dbmap.Select(&q2, "select * from dashboard where id=3")
fmt.Printf("q2=%v\n", q2)

打印:

p2=[{{<nil> Tomek b1f6f0ba-f618-00d6-6d24-8410a9219c95}}]

这是: 时间范围、用户名和 UUID

可能很重要:使用“gorp”进行数据库管理

最佳答案

扫描函数将在传递给 dbmap.Select() 的值类型时调用,因此在您的情况下,您需要将 Dashboard 实现为 scanner.

关于Go Scanner 仍然返回 <nil>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57665357/

相关文章:

go - 编译器可以优化 defer 中的递归调用吗?

google-app-engine - 如何根据条件向数据存储区查询添加过滤器

go - 如何从另一个函数调用 dbmap.Insert(interface{})?

json - Gorm 输出到 json

postgresql - 如何处理与 gorp 的连接?

go - 数据存储 : Create parent and child entity in an entity group transaction?

dictionary - append 的第一个参数必须是 slice;有结构 - golang 映射

go - 如何将 "try send"写入 channel ,如果 channel 已满则中止?

mysql - golang Gorp 与 SELECT 错误

go - 使用 go sql 时,在每种类型中重写 Scan 和 Value 方法时避免重复代码