"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como faço para incorporar uma estrutura dentro de outra estrutura em Gorm e armazená -la como um campo na tabela principal?

Como faço para incorporar uma estrutura dentro de outra estrutura em Gorm e armazená -la como um campo na tabela principal?

Publicado em 2025-01-30
Navegar:921

How do I embed a struct within another struct in GORM and store it as a field in the main table?

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:

  1. define Uma estrutura incorporada:
type A struct {
    Point *GeoPoint
}

type GeoPoint struct {
    Lat float64
    Lon float64
}
  1. Implemente o sql.scanner e o driver.valuer interfaces para a estrutura incorporada:
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
}
  1. Atualize o modelo Gorm para usar a estrutura incorporada com o Gorm: "Column" e Gorm: "Type" Tags:
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.

Tutorial mais recente Mais>

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