【问题标题】:GoLang Parse Point DataTypeGoLang 解析点数据类型
【发布时间】:2020-01-12 09:35:52
【问题描述】:

在我的数据库中,我有一个需要坐标值的表。 这样的值存储为

点数据类型

但是,当我尝试获取这样的值时,GO 会以错误响应:

不支持扫描,将 driver.Value 类型 []uint8 存储到 *models.Point 类型中

这是我的模特

type Business struct {
    ID int `json:"id,omitempty"`
    Name string `json:"name,omitempty"`
    Owner string `json:"owner,omitempty"`
    Coordinates Point `json:"coordinates,omitempty"`
    Reason string `json:"reason,omitempty"`
    BusinessBranches []BusinessBranches `json:"reason,omitempty"`
}

这是Point类型的模型

type Point struct {
    X float64 `json:"lat"`
    Y float64 `json:"lon"`
}

在我的控制器中,我称之为业务选择。

func (b *BusinessRepoImpl) Select() ([]models.Business, error) {
    business_list := make([]models.Business, 0)
    rows, err := b.Db.Query("SELECT id, name, owner, coordinates, reason FROM business")
    if err != nil {
        return business_list, err
    }
    for rows.Next() {
        business := models.Business{}
        err := rows.Scan(&business.ID, &business.Name, &business.Owner, &business.Coordinates, &business.Reason)
        if err !=  nil {
            fmt.Println(err)
            break
        }
        business_list = append(business_list, business)
    }
    err = rows.Err()
    if err != nil {
        return business_list, err
    }
    return business_list, nil
}

任何人都知道如何解析这样的 DataType,所以我可以读取并存储它吗? 谢谢。 :)

【问题讨论】:

  • 最简单的方法可能是使用您的 Point 类型实现 sql.Scanner 接口,并解析来自数据库的数据。您必须弄清楚数据是如何返回的,看起来它正在获取 []uint8。
  • []uint8 返回:KDEyLjEyNjgxNDIsLTg2LjI3NTQwMDAwMDAwMDAwNSk= 我需要将该数据转换为他的数值。
  • 这看起来像 base64 编码的数据。解码它,看看它显示什么。顺便说一句,Point 不是 postgres 数据类型吗?也许在 postgres sql 驱动程序的某个地方有一个 Point 结构?
  • 其实是的,我在开头说我有一个列类型是 Point DataType 的表,但是 postgres 没有 Point 结构,所以我需要解析它
  • 我对该文本进行了 base64 解码,并打印出:(12.1268142,-86.275400000000005) 我想你可以从那里开始。

标签: postgresql go


【解决方案1】:

如我所见,您需要设置一个具有当前纬度、经度的结构,然后从数据库中解组。

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    • 2020-10-16
    • 2010-12-21
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多