Как отобразить вложенное поле в структуру go коллекции, которая не вложена в формат?

# #mongodb #go #struct

Вопрос:

Формат bson:

 {
  name: "root", 
  sports:" Cricket", 
  Personal: {
     age:32
  }
}
 

Формат структуры Go:

 type Person struct {
    Name string `bson:"name"`
    Age  int `bson:"age"`
}
 

Как привязать значение возраста к этому формату структуры в golang?

Ответ №1:

Вам нужен промежуточный тип, который поможет вам преобразовать вашу базу данных DTO (Объект преобразования данных) в объект модели. Рекомендуется разделить эти два.

 package main

import (
    "encoding/json"
    "fmt"
)

type PersonInfoDto struct {
    Age int `json:"age"`
}

type PersonDto struct {
    Name     string        `json:"name"`
    Sports   string        `json:"sports"`
    Personal PersonInfoDto `json:"Personal"`
}

type Person struct {
    Name string
    Age  int
}

func main() {
    jsonInput := "{ "name": "root", "sports": "Cricket", "Personal": { "age": 32 }}"
    var dto PersonDto
    err := json.Unmarshal([]byte(jsonInput), amp;dto)
    if err != nil {
        fmt.Println(err)
    }

    // your model object
    p := Person{dto.Name, dto.Personal.Age}
    fmt.Println(p)
}

 

Комментарии:

1. Спасибо, это сработает. У меня было еще одно маленькое сомнение. Что делать, если запрошенный формат изменился после того, как он перешел в производство? До этого realese документы были без вложенных документов, и после этого realese они будут вложенными. Как справиться с этим сценарием?

2. Вместо того, чтобы преобразовывать ответ в определенную структуру, вы можете сохранить его в карте (пары ключ-значение) и решить в своем приложении, что делать, если определенные поля существуют или нет.