incorporando estruturas com gorm
em gorm, ao incorporar uma estrutura dentro de outro, Gorm pode criar uma tabela separada para a estrutura incorporada. No entanto, se você deseja armazenar a estrutura incorporada como um campo adicional dentro da tabela principal, a abordagem a seguir pode ser utilizada:
solução:
type A struct {
Point *GeoPoint
}
type GeoPoint struct {
Lat float64
Lon float64
}
func (gp *GeoPoint) Scan(src interface{}) error {
// Convert the `src` value to a byte array.
b, ok := src.([]byte)
if !ok {
return fmt.Errorf("could not convert to byte array")
}
// Unmarshal the byte array into the `GeoPoint` struct.
if err := json.Unmarshal(b, gp); err != nil {
return fmt.Errorf("could not unmarshal JSON: %v", err)
}
return nil
}
func (gp GeoPoint) Value() (driver.Value, error) {
// Marshal the `GeoPoint` struct into a byte array.
b, err := json.Marshal(gp)
if err != nil {
return nil, fmt.Errorf("could not marshal JSON: %v", err)
}
return string(b), nil
}
type A struct {
gorm.Model
Point *GeoPoint `gorm:"column:point;type:json"`
}
implementando os métodos de varredura e valor, o Gorm pode converter a estrutura incorporada de e para um formato JSON. The Gorm: "Coluna" e Gorm: "Type" Tags Especifique o nome da coluna e o tipo de dados para a estrutura incorporada na tabela principal.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3