Каков наилучший способ частичной сериализации структуры? - PullRequest
0 голосов
/ 06 января 2019

Я использовал библиотеку gorm.

gorm поддерживает вставку и возврат данных структуры в БД.

Но моему сервису не всегда нужны все члены структуры.

Например;

/ Address => этот API вернет только адрес пользователя.

Но orm возвращает весь struct memeber.

вот так.

    type User {
      Name string
      Address string
    }

    db.find(&user)

    apiResponse(200,user)

Поэтому я всегда делаю код сериализатора для конкретного API, возвращающего форму.

    type Serializer  {
       Address string
    }

    func MakeSerializer(User u) Serializer {
            return Serilizer { Address: u.Address }
    }

Но вышеприведенный код не годится.

Потому что все большинство форм возврата Api различны. Поэтому мне понадобится огромный код Serilzer.

Покажите мне лучшие практики для этой проблемы.

Спасибо,

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы можете использовать тег json:"-", чтобы удалить поле из сериализации JSON вашей структуры, но я предпочитаю использовать разные структуры для слоя базы данных и интерфейса остальных.

Примерно так:

type Construction struct {
    gorm.Model

    Name        string `gorm:"size:30;unique_index"`
    Description string `gorm:"size:100"`
}

type Construction struct {
    Id          uint   `json:"Id"`
    Name        string `json:"Name"`
    Description string `json:"Description"`
    Additions   string `json:"Additions"` 
}

func setConstructionFields(ct types.Construction, construction *models.Construction, additions string) types.Construction {
    ct.Name = construction.Name
    ct.Description = construction.Description
    ct.Additions = additions
    return ct
}

В этом случае вам нужно иметь две структуры вместо одной, и вам нужно написать функцию для преобразования одной структуры в другую, но у вас больше гибкости, когда вы работаете со своими данными, и ваш уровень базы данных будет меньше подключен к службе отдыха. слой.

0 голосов
/ 06 января 2019

Полагаю, вы сериализовали свои ответы в JSON. Это решает вашу проблему. Чтобы всегда пропускать сериализацию поля, просто добавьте json:"-".

type User {
   Name string
   Address string `json:"-"`
}
...