"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 desempacotar nós incorporados de diferentes tipos usando interfaces no mgo (Go)?

Como desempacotar nós incorporados de diferentes tipos usando interfaces no mgo (Go)?

Publicado em 2024-11-10
Navegar:593

 How to Unmarshal Embedded Nodes of Different Types Using Interfaces in mgo (Go)?

Como usar uma interface como modelo em mgo (Go)

Ao lidar com fluxos de trabalho que contêm vários nós incorporados de diferentes tipos, aproveitar as interfaces Go é uma abordagem comum. No entanto, representa um desafio ao tentar desempacotar esses documentos usando mgo.

Para resolver esse problema, você não pode incluir diretamente uma interface em um documento. Isso ocorre porque o decodificador não possui as informações de tipo necessárias para criar a instância apropriada.

Uma solução viável envolve a criação de uma estrutura de wrapper para armazenar o nó real e seu tipo:

type NodeWithType struct {
   Node Node `bson:"-"`
   Type string
}

type Workflow struct {
   CreatedAt time.Time
   StartedAt time.Time
   CreatedBy string
   Nodes []NodeWithType
}

Para concluir a configuração, você deve implementar a função SetBSON em NodeWithType. Esta função irá decodificar a string de tipo, instanciar o tipo de nó correto com base nessa string e, em seguida, desempacotar o documento na instância recém-criada. A implementação de SetBSON garante que cada nó incorporado seja desempacotado adequadamente no tipo concreto correto.

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