【发布时间】: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