首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用GORM存储嵌入式结构?

如何用GORM存储嵌入式结构?
EN

Stack Overflow用户
提问于 2015-02-13 23:29:53
回答 4查看 6.2K关注 0票数 10

如果我有这样的类型,如何使用GORM存储嵌入式结构

代码语言:javascript
运行
复制
type A struct {
    point GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}

GORM尝试将其添加到新表中,但我想将其添加为另一个字段。

如何做到这一点?

EN

回答 4

Stack Overflow用户

发布于 2019-02-19 12:00:28

您可以尝试:

代码语言:javascript
运行
复制
   type A struct {
    point GeoPoint `gorm:"embedded"`
} 
票数 4
EN

Stack Overflow用户

发布于 2019-12-10 12:49:02

对于任何正在寻找将struct放入GORM模型中并使其自动编组和解组的人来说。

这个解决方案是基于chris的答案的,而且它是有效的!

例如,我想把孩子的数组放在Parent内部作为编组的JSON:

代码语言:javascript
运行
复制
type Child struct {
    Lat float64
    Lng float64
}

type ChildArray []Children

func (sla *ChildArray) Scan(src interface{}) error {
    return json.Unmarshal(src.([]byte), &sla)
}

func (sla ChildArray) Value() (driver.Value, error) {
    val, err := json.Marshal(sla)
    return string(val), err
}

type Parent struct {
    *gorm.Model    
    Childrens ChildArray `gorm:"column:childrens;type:longtext"`
}
票数 4
EN

Stack Overflow用户

发布于 2018-06-24 14:17:30

我不熟悉Gorm,但使用postgres 时,您需要实现sql.Scanner和sql.Valuer接口,以便将数据转换为postgres类型。下面的代码没有检查错误,因此需要进行一些调整。

https://play.golang.org/p/2-Y-wSeAWnj

代码语言:javascript
运行
复制
package main

import (
    "database/sql/driver"
    "fmt"
    "strconv"
    "strings"
)

type GeoPoint struct {
    Lat float64
    Lon float64
}

func (gp GeoPoint) Value() (driver.Value, error) {
    return fmt.Sprintf("(%d,%d)", gp.Lat, gp.Lon), nil
}

func (gp GeoPoint) Scan(src interface{}) error {
    raw := src.(string)
    coords := raw[1 : len(raw)-1]
    vals := strings.Split(coords, ",")
    gp.Lat, _ = strconv.ParseFloat(vals[0], 64)
    gp.Lon, _ = strconv.ParseFloat(vals[1], 64)
    return nil
}

func main() {
    gp := GeoPoint{Lat: 112, Lon: 53}
    d, _ := gp.Value()
    fmt.Printf("%+v\n", d)

    gp.Scan("(53, -110)")
    fmt.Printf("%+v\n", gp)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28503001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档