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

如何在 Go 中表示 PostgreSQL 区间

如何在 Go 中表示 PostgreSQL 区间

Go
江户川乱折腾 2021-11-08 18:18:09
如何在 Go 中表示 PostgreSQL 区间?我的结构是这样的:type Product struct {    Id              int    Name            string    Type            int    Price           float64    Execution_time  ????}我的数据库上的 execution_time 字段是interval.
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

最佳答案我已经遇到是使用bigint你的架构,并实现Value与Scan上一个包装类型time.Duration。


// Duration lets us convert between a bigint in Postgres and time.Duration

// in Go

type Duration time.Duration


// Value converts Duration to a primitive value ready to written to a database.

func (d Duration) Value() (driver.Value, error) {

    return driver.Value(int64(d)), nil

}


// Scan reads a Duration value from database driver type.

func (d *Duration) Scan(raw interface{}) error {

    switch v := raw.(type) {

    case int64:

        *d = Duration(v)

    case nil:

        *d = Duration(0)

    default:

        return fmt.Errorf("cannot sql.Scan() strfmt.Duration from: %#v", v)

    }

    return nil

}

不幸的是,您将牺牲在查询中进行区间算术的能力 - 除非一些聪明的人想要发布bigint=>的类型转换interval。


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

添加回答

举报

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